2013-10-01 2 views
1

У меня есть два массива следующим образом:питона словарь с повторением ключа и значением

a=['history','math','history','sport','math'] 
b=['literature','math','history','history','math'] 

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

Мой код:

combined_dict={} 
for k , v in zip(a,b): 
    combined_dict[k]=v 
    print(combined_dict) 

ответ

6

В словарях, нет дубликатов ключей. Поэтому, когда у вас есть {'history':'literature'} после первого цикла, он будет превышен с {'history':'history'}.

Вместо того, чтобы создавать словарь, почему бы не просто пройти через zip(a, b)?

for k, v in zip(a, b): 
    if k == v: 
     print(k, v) 

Если вы хотите иметь несколько значений для одного ключа, то вы можете использовать defaultdict из collections модуля:

>>> from collections import defaultdict 
>>> d = defaultdict(list) 
>>> for k, v in zip(a, b): 
...  d[k].append(v) 
... 
>>> print(d) 
defaultdict(<type 'list'>, {'sport': ['history'], 'math': ['math', 'math'], 'history': ['literature', 'history']}) 
>>> print(list(d.items())) 
[('sport', ['history']), ('math', ['math', 'math']), ('history', ['literature', 'history'])] 
>>> for k, v in d.items(): 
...  if k in v: 
...   print k, v 
... 
math ['math', 'math'] 
history ['literature', 'history'] 
+0

спасибо. Ваше первое предложение работает правильно, и это было то, что я имел в виду. так что, пожалуйста, скажите мне, как я могу сохранить все элементы результата в одном списке, чтобы рассчитать окончательное количество элементов в этом списке? – Basira

+0

@Basira Поместите один список внутри другого? вы можете сделать 'a.extend (b)' – TerryA

1

dict не может иметь тот же ключ для двух записей. Для нескольких значений с одним и тем же ключом необходимо указать dict со списком в качестве значения.

Попробуйте это:

from collections import defaultdict 
a=['history','math','history','sport','math'] 
b=['literature','math','history','history','math'] 
combined_dict = defaultdict(list) 
for k, v in zip(a,b): 
    combined_dict[k].append(v) 

print combined_dict 
0

Если вы хотите, чтобы получить список всех пунктов, где есть совпадение между двумя списками, попробуйте

>>> print [k for k, v in zip(a, b) if k == v] 
    ['math', 'history', 'math'] 

Это дает вам список соответствующие элементы, которые затем можно обрабатывать дальше.

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