Цикл по списку и вложенному словарю - PullRequest
0 голосов
/ 20 октября 2018

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

У меня aList определено как

[24, 19, 18, 15, 15, 23, 18, 15, 18, 15]

и aDict определено как

{'1': 18, '2': 76, '3': 0, '4': 13, '5': 4, '6': 30, '7': 25, '8': 21} 

и определено masterDict (инициализируется с 0s) как

{'1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0}

Как проверить, соответствует ли каждый элемент в aList значению в aDict?Если это так, увеличьте значение соответствующего ключа в masterDict на 1?

Код, который я сейчас использую:

for x in aList:
    for k, v in aDict.iteritems():
        if x == v:
            masterDict[k] = +1

Однако это возвращает masterDict, который выглядит какthis

{'1': 1, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0}

aList содержит три вхождения элемента 18 и соответствует значению в aDict.Я ищу, чтобы увеличить соответствующий ключ в masterDict в три раза.Тем не менее, он увеличивается только один раз.

Результат, который я ищу, равен

{'1': 3, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0}

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

это из-за опечатки в вашем коде - должно быть masterDict[k] += 1 вместо masterDict[k] = +1

после выхода изменения: {'1': 3, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0}

0 голосов
/ 20 октября 2018

Вы можете просто использовать для k в dct, и если значение, которое производит ключ, соответствует элементу в lst, тогда увеличьте k в mst на 1

mstr = {'1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0}
dct = {'1': 18, '2': 76, '3': 0, '4': 13, '5': 4, '6': 30, '7': 25, '8': 21}
lst = [24, 19, 18, 15, 15, 23, 18, 15, 18, 15]

for i in lst:
    for k in dct:
        if dct[k] == i:
            mstr[k] += 1

print(mstr)
# {'1': 3, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0}
...