2015-08-24 2 views
0

Здравствуйте, я пытаюсь сравнить этот список словарей:
Зова этого списка Животных:Попытки разделить список словарей

[{'Fishs=16': 'Fishs=16', 
    'Birds="6"': 'Birds="6"', 
    'Dogs=5': 'Dogs=5', 
    'Bats=10': 'Bats=10', 
    'Tigers=11': 'Tigers=11', 
    'Cats=4': 'Cats=4'}, 
{'Cats=40': 'Cats=40', 
    'Tigers': 'Tigers = 190', 
    'Birds=4': 'Birds=4', 
    'Bats': 'Bats = Null', 
    'Fishs': 'Fishs = 24', 
    'Dogs': 'Dogs = 10'}] 

Я хочу, чтобы сделать список выглядеть следующим образом

[{'Tigers': 'Tigers=11', 
    'Dogs': 'Dogs=5', 
    'Cats': 'Cats=4', 
    'Bats': 'Bats=10', 
    'Fishs': 'Fishs=16', 
    'Birds': 'Birds="6"'}, 
{'Tigers': 'Tigers=190', 
    'Dogs': 'Dogs=10', 
    'Cats': 'Cats=40', 
    'Bats': 'Bats=Null', 
    'Fishs': 'Fishs=24', 
    'Birds': 'Birds=4'}] 

так что я могу сравнить его с этим другим списком:

{'Tigers': '19', 
'Dogs': '10', 
'Cats': '40', 
'Bats': '10', 
'Fishs': '234', 
'Birds': '3'} 

Her эс код я пытался использовать Симметричную разделить список:

animals = [] 
for d in setData: 
    animals.append({k: v.split('=')[1] for k, v in d.items()}) 

Это, однако, не разделит список, так как мои ключи в словарях в этом формате, а не Dogs=4Dogs = 4. Мне нужно разбить этот список, даже если они находятся в этом формате.

На совершенно другой стороне примечание, когда эта часть кода исправлена, мне нужно выяснить, как сравнивать данные этих ключей друг с другом.

, например: Допустим, у меня есть Dogs="23" и сравниваемый список Dogs="50" Согласно моему коду, это должно быть неправильным, но из-за кавычек («23») он говорит, что это, это не сравнить значение внутри. Это код, я должен сравнить:

correct_parameters = dict(re.match(r'(\w*)="?(\d*)"?', s).group(1, 2) for s in dataDefault[1:]) 
print correct_parameters 
count = 0 
while (count < (len(setNames))): 
    for number, item in enumerate(animals, 1): 
     print setNames[count] 
     count = count + 1 
     for param, correct in correct_parameters.items(): 
      if item[param] == correct: 
       print('{} = {} which is correct'.format(param, correct)) 

Однако сейчас я просто пытаюсь исправить список раздвоение вопрос я имею.

+1

BTW множественное число от 'Fish' является' 'Fish' не Fishs' – muddyfish

+6

Почему вы пытаетесь получить его в форме' [ {'Tigers': 'Tigers = 11', ... 'а не более полезный вид' [{'Tigers': 11, 'или даже' [{'Tigers': '11', '? – or1426

+0

@ or1426 это то, что делает код. Посмотрите на 'animals = []' – JeanP

ответ

1
lst = [{'Fishs=16': 'Fishs=16', 'Birds="6"': 'Birds="6"', 'Dogs=5': 'Dogs=5', 'Bats=10': 'Bats=10', 'Tigers=11': 'Tigers=11', 'Cats=4': 'Cats=4'}, {'Cats=40': 'Cats=40', 'Tigers': 'Tigers = 190', 'Birds=4': 'Birds=4', 'Bats': 'Bats = Null', 'Fishs': 'Fishs = 24', 'Dogs': 'Dogs = 10'}] 

# for each element in that list, loop with index 
for idx, val in enumerate(lst): 
    # create temp object 
    o = {} 
    # loop the dictionary 
    for k,v in val.iteritems(): 
     # if = is found in key 
     if '=' in k: 
      # change the key 
      k = k.split('=')[0] 
     # insert to temp object 
     o[k] = v 
    # change the temp object to current element in the list 
    lst[idx] = o 
+0

Это отлично работает, как я могу это изменить для будущей ссылки. Вместо этого могу получить следующее: '[{'Dogs': '5', ....' – JeanP

+2

Я намеренно прокомментировал код, чтобы вы могли научиться. но ... https://gist.github.com/limtaesu/d7bb5662122a045e58b0 – taesu

0

Просто strip строка после того, как вы разделяете его:

Смежные вопросы