如何使用具有唯一键的多个列表创建词典

2024-10-02 10:18:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从一个预定义的列表中向现有字典添加key,value。下面是一个例子:

# I created players dictionary : 
players = {'gyms_visited': [],
 'player_id': [4],
 'player_name': 'cynthia',
 'player_pokemon': {},
 'time_played': 30.9}

我正在尝试将列表ab添加到我上面创建的播放器词典中:

^{pr2}$

还有,有没有办法使Player_id的值(4,2)作为播放器字典的键(这就是我要实现的):

{4: {'gyms_visited': [],
     'player_name': 'cynthia',
     'player_pokemon': {},
     'time_played': 30.9},
 2: {'player_name':'teri',
     'time_played':22.2,
     'gyms_visited': [],
     'player_pokemon':{}}

Tags: keynameid列表字典time播放器player
2条回答

你只需要:

# to change already existing dict
players = {players['player_id']:{key:value for key,value in players.items() if key != 'player_id'}}
# make dict from lists a and b
z = {b[a=='player_id']: {key:value for key,value in zip(a,b) if key !='player_id'}}
# group both
players={**players,**z}

详情如下:

首先,您需要将已经生成的dict更改为所需的输出类型,如下所示:

^{pr2}$

将输出:

{4: {'gyms_visited': [], 
    'player_name': 'cynthia', 
    'player_pokemon': {}, 
    'time_played': 30.9}}

然后你把你的两个列表ab做一个额外的dict,如下所示:

z = {b[a=='player_id']: {key:value for key,value in zip(a,b) if key !='player_id'}}
print(z)

将输出:

{2: {'player_name':
    'teri', 'time_played': 22.2, 
    'player_pokemon': {}, 
    'gyms_visited': []}}

最后,把它们放在同一个词中,如下所示:

players={**players,**z}
print(players)

输出:

{4: {'gyms_visited': [],
    'player_name': 'cynthia',
    'player_pokemon': {},
    'time_played': 30.9},
 2: {'player_name': 'teri',
    'time_played': 22.2, 
    'player_pokemon': {},
    'gyms_visited': []}}

请注意,如果您想添加更多内存,可以在循环中执行此操作。例如,考虑以下新列表:

^{8}$

如前所述:

z = {b[a=='player_id']: {key:value for key,value in zip(a,b) if key !='player_id'}}
players={**players,**z}

作为输出:

{4: {'gyms_visited': [], 
    'player_name': 'cynthia', 
    'player_pokemon': {}, 
    'time_played': 30.9}, 
 2: {'player_name': 'teri', 
    'time_played': 22.2, 
    'player_pokemon': {}, 
    'gyms_visited': []}, 
 6: {'player_name': 'new_Name', 
     'time_played': 66.6, 
     'player_pokemon': {}, 
     'gyms_visited': []}}

您可以参考这些关于merging dicts**dicts的链接,以便更好地理解。在

这里还有一个用于内置zip方法的link。在

from itertools import izip
from pprint import pprint

# Edit your existing dict
>>> players2 = {players.pop('player_id')[0]: players}
>>> pprint(players2)
{4: {'gyms_visited': [],
     'player_name': 'cynthia',
     'player_pokemon': {},
     'time_played': 30.9}}

# Add new player info
>>> players2.update({b[0]: {k: v for k, v in izip(a, b[1:])}})
>>> pprint(players2)
{2: {'gyms_visited': [],
     'player_name': 'teri',
     'player_pokemon': {},
     'time_played': 22.2},
 4: {'gyms_visited': [],
     'player_name': 'cynthia',
     'player_pokemon': {},
     'time_played': 30.9}}

注意:无论何时使用一些迭代代码,都值得检查一下内置的itertools package。^例如,{}通过返回一个迭代器而不是一个列表来改进{}。在

相关问题 更多 >

    热门问题