简体   繁体   English

用名称列表创建字典

[英]Creating a dictionary with a list of names

I have this list of names: [Frank, Sam, Kevin, Jack] 我有以下名单: [Frank, Sam, Kevin, Jack]

Is it possible to create a dictionary using the names in the list to create something like this? 是否可以使用列表中的名称创建字典来创建类似这样的内容?

'Frank' : {'Sam': 0, 'Kevin': 0, 'Jack': 0},
 'Sam' : {'Frank': 0, 'Kevin': 0, 'Jack': 0},
 'Kevin' : {'Frank': 0, 'Sam': 0, 'Jack': 0}
 'Jack' : {'Frank': 0, 'Sam': 0,  'Kevin': 0}

I want to know if it's possible to iterate through the list, pick the first name and then create a dictionary with it, with the other members in the list as keys and 0 as the default value. 我想知道是否可以遍历列表,选择名字,然后使用它创建一个字典,列表中的其他成员作为键,默认值为0。 And then repeat it for the other elements in the list as well. 然后对列表中的其他元素重复此操作。

I was thinking of using something like this. 我当时正在考虑使用这样的东西。

my_dynamic_vars = dict()
my_dynamic_vars.update({string: dict()})

Any help would be much appreciated. 任何帮助将非常感激。

You can use nested dictionary comprehensions : 您可以使用嵌套字典推导

>>> lst = ['Frank', 'Sam', 'Kevin', 'Jack']
>>> dct = {x:{y:0 for y in lst if y != x} for x in lst}
>>> dct
{'Frank': {'Kevin': 0, 'Sam': 0, 'Jack': 0}, 'Kevin': {'Frank': 0, 'Jack': 0, 'Sam': 0}, 'Sam': {'Frank': 0, 'Jack': 0, 'Kevin': 0}, 'Jack': {'Frank': 0, 'Kevin': 0, 'Sam': 0}}
>>>
>>> # Just to demonstrate
>>> from pprint import pprint
>>> pprint(dct)
{'Frank': {'Jack': 0, 'Kevin': 0, 'Sam': 0},
 'Jack': {'Frank': 0, 'Kevin': 0, 'Sam': 0},
 'Kevin': {'Frank': 0, 'Jack': 0, 'Sam': 0},
 'Sam': {'Frank': 0, 'Jack': 0, 'Kevin': 0}}
>>>

ummm

d= {}
names = ["Frank","Sam","Kevin","Jack"]
for name in names:
    d[name] = dict.fromkeys(set(names).difference([name]),0)

print d

is probably how I would do it .. 大概就是我会怎么做..

names = ['Frank', 'Sam', 'Kevin', 'Jack']
d = dict.fromkeys(names, 0)

names_dict = {}

for name in names:
    temp = d.copy()
    del temp[name]
    names_dict.update([(name, temp)])

output: 输出:

>>> for d in names_dict:
>>>     print d    
'Frank': {'Jack': 0, 'Kevin': 0, 'Sam': 0}
'Sam': {'Frank': 0, 'Jack': 0, 'Kevin': 0}
'Kevin': {'Frank': 0, 'Jack': 0, 'Sam': 0}
'Jack': {'Frank': 0, 'Kevin': 0, 'Sam': 0}
names = ['Frank', 'Sam', 'Kevin', 'Jack']
d = {name: dict.fromkeys([x for x in names if x != name], 0)
     for name in names}

from pprint import pprint
pprint(d)

Output 输出量

{'Frank': {'Jack': 0, 'Kevin': 0, 'Sam': 0},
 'Jack': {'Frank': 0, 'Kevin': 0, 'Sam': 0},
 'Kevin': {'Frank': 0, 'Jack': 0, 'Sam': 0},
 'Sam': {'Frank': 0, 'Jack': 0, 'Kevin': 0}}

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

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