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

use*_*335 0 python string dictionary python-2.7 python-3.x

我有这个名单: [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}
Run Code Online (Sandbox Code Playgroud)

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

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

my_dynamic_vars = dict()
my_dynamic_vars.update({string: dict()})
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.

iCo*_*dez 7

您可以使用嵌套字典理解:

>>> 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}}
>>>
Run Code Online (Sandbox Code Playgroud)