简体   繁体   English

如何遍历列表并将它们添加到嵌套字典中的值?

[英]How to iterate through a list and add them to the values inside nested dictionary?

  • GXX = game_id GXX = 游戏 ID
player_statistics = 
{'P001': {'G02': ['1'], 'G05': ['0'], 'G07': ['0'], 'G08': ['0'], 'G10': ['1']},
 'P067': {'G02': ['1'], 'G05': ['1'], 'G07': ['0'], 'G08': ['0'], 'G10': ['0']},
 'P218': {'G02': ['0'], 'G05': ['1'], 'G07': ['1'], 'G08': ['0'], 'G10': ['0']},
 'P101': {'G02': ['0'], 'G05': ['0'], 'G07': ['1'], 'G08': ['1'], 'G10': ['0']},
 'P456': {'G02': ['1'], 'G05': ['1'], 'G07': ['0'], 'G08': ['1'], 'G10': ['0']}}

game_info = [
['G05', 'Hopscotch', 'N', '2'],
 ['G07', 'Dominoes', 'S', '5'],
 ['G08', 'Chess', 'N', '3'],
 ['G10', 'Monopoly', 'N', '3'],
 ['G02', 'MineCraft', 'S', '5']
]

I want to add index[2] and index[3] from each list in the game_info to the value inside value (list) in the player_statistics.我想将 game_info 中每个列表中的 index[2] 和 index[3] 添加到 player_statistics 中的值(列表)中的值。

My code:我的代码:

for values in player_statistics.values():
    for k, v in values.items():
        for data in game_info:
            if k == data[0]:
                player_statistics[k].insert(1, data[2])
                player_statistics[k].insert(2, data[3])

My code Output:我的代码输出:

Traceback (most recent call last):
  File "D:\projects\FinalCodingChallenge\test.py", line 25, in <module>
    player_statistics[k].insert(1, data[2])
KeyError: 'G02'

Expected Output:预期输出:

player_statistics = 
{'P001': {'G02': ['1', 'S', '5'], 'G05': ['0', 'N', '2'], 'G07': ['0', 'S', '5'], 'G08': ['0', 'N', '3'], 'G10': ['1', 'N', '3']},
 'P067': {'G02': ['1', 'S', '5'], 'G05': ['1', 'N', '2'], 'G07': ['0', 'S', '5'], 'G08': ['0', 'N', '3'], 'G10': ['0', 'N', '3']},
 'P218': {'G02': ['0', 'S', '5'], 'G05': ['1', 'N', '2'], 'G07': ['1', 'S', '5'], 'G08': ['0', 'N', '3'], 'G10': ['0', 'N', '3']},
 'P101': {'G02': ['0', 'S', '5'], 'G05': ['0', 'N', '2'], 'G07': ['1', 'S', '5'], 'G08': ['1', 'N', '3'], 'G10': ['0', 'N', '3']},
 'P456': {'G02': ['1', 'S', '5'], 'G05': ['1', 'N', '2'], 'G07': ['0', 'S', '5'], 'G08': ['1', 'N', '3'], 'G10': ['0', 'N', '3']}}

I would appreciate if you could explain what I did wrong on my code, and show me the appropriate way to do it.如果您能解释我在代码中做错了什么,并向我展示正确的方法,我将不胜感激。 Thanks in advance.提前致谢。

Try:尝试:

import pprint

player_statistics = {'P001': {'G02': ['1'], 'G05': ['0'], 'G07': ['0'], 'G08': ['0'], 'G10': ['1']},
                     'P067': {'G02': ['1'], 'G05': ['1'], 'G07': ['0'], 'G08': ['0'], 'G10': ['0']},
                     'P218': {'G02': ['0'], 'G05': ['1'], 'G07': ['1'], 'G08': ['0'], 'G10': ['0']},
                     'P101': {'G02': ['0'], 'G05': ['0'], 'G07': ['1'], 'G08': ['1'], 'G10': ['0']},
                     'P456': {'G02': ['1'], 'G05': ['1'], 'G07': ['0'], 'G08': ['1'], 'G10': ['0']}}

game_info = [
    ['G05', 'Hopscotch', 'N', '2'],
    ['G07', 'Dominoes', 'S', '5'],
    ['G08', 'Chess', 'N', '3'],
    ['G10', 'Monopoly', 'N', '3'],
    ['G02', 'MineCraft', 'S', '5']
]


lookup = { key : data  for key, _, *data in game_info }

for key, player in player_statistics.items():
    for key, value in player.items():
        if key in lookup:
            value.extend(lookup[key])


pprint.pprint(player_statistics)

Output输出

{'P001': {'G02': ['1', 'S', '5'],
          'G05': ['0', 'N', '2'],
          'G07': ['0', 'S', '5'],
          'G08': ['0', 'N', '3'],
          'G10': ['1', 'N', '3']},
 'P067': {'G02': ['1', 'S', '5'],
          'G05': ['1', 'N', '2'],
          'G07': ['0', 'S', '5'],
          'G08': ['0', 'N', '3'],
          'G10': ['0', 'N', '3']},
 'P101': {'G02': ['0', 'S', '5'],
          'G05': ['0', 'N', '2'],
          'G07': ['1', 'S', '5'],
          'G08': ['1', 'N', '3'],
          'G10': ['0', 'N', '3']},
 'P218': {'G02': ['0', 'S', '5'],
          'G05': ['1', 'N', '2'],
          'G07': ['1', 'S', '5'],
          'G08': ['0', 'N', '3'],
          'G10': ['0', 'N', '3']},
 'P456': {'G02': ['1', 'S', '5'],
          'G05': ['1', 'N', '2'],
          'G07': ['0', 'S', '5'],
          'G08': ['1', 'N', '3'],
          'G10': ['0', 'N', '3']}}

Looks like you missed the keys from the first for loop.看起来您错过了第一个 for 循环中的keys It should work if you add it:如果您添加它,它应该可以工作:

for keys, values in player_statistics.items():
    for k, v in values.items():
        for data in game_info:
            if k == data[0]:
                player_statistics[keys][k].insert(1, data[2])
                player_statistics[keys][k].insert(2, data[3])

print(player_statistics)

Based on my understanding, with根据我的理解,与

player_statistics[k].insert() player_statistics[k].insert()

you are trying to find game "G02" in the players list ("P001", "P061", ...)您正试图在玩家列表中找到游戏“G02”(“P001”、“P061”……)

for values in player_statistics.values():
    for k, v in values.items():
        for data in game_info:
            if k == data[0]:
                player_statistics[k].insert(1, data[2])
                player_statistics[k].insert(2, data[3])

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM