创建一个包含名称列表的字典

时间:2014-03-07 00:21:11

标签: python string python-2.7 python-3.x dictionary

我有这个名单:[Frank, Sam, Kevin, Jack]

是否可以使用列表中的名称创建字典来创建这样的字体?

'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}

我想知道是否可以遍历列表,选择第一个名称,然后用它创建一个字典,列表中的其他成员作为键,0作为默认值。然后重复列表中的其他元素。

我在考虑使用这样的东西。

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

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:7)

您可以使用嵌套的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}}
>>>

答案 1 :(得分:1)

ummm

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

print d

可能是我会这样做的。

答案 2 :(得分:1)

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)])

<强>输出:

>>> 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}

答案 3 :(得分: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)

输出

{'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}}