我试图创建一个字典,它将有一个关系,从列表的不同方面采取
import collections
def create_dict(sides = ["A", "B", "C"]):
my_dict = dict.fromkeys(sides, {})
print("my_dict created here: ", my_dict)
for k in sides:
remining_list = collections.deque(sides)
remining_list.remove(k)
my_dict[k]["relation"] = dict.fromkeys(remining_list, 0)
return my_dict
dict是用空字典创建的:
('my_dict created here: ', {'A': {}, 'C': {}, 'B': {}})
我希望输出为:
{'A': {'relation': {'B': 0, 'C': 0}},
'B': {'relation': {'A': 0, 'C': 0}},
'C': {'relation': {'A': 0, 'B': 0}}}
但是,内部字典的每个值都返回到最后处理的字典,如下所示:
{'A': {'relation': {'A': 0, 'B': 0}},
'C': {'relation': {'A': 0, 'B': 0}},
'B': {'relation': {'A': 0, 'B': 0}}}
不知道我在哪一步做错了。当我在键上循环时,我只把它作为一个值给这个特定的键,而不是像输出中那样给所有的键。 还有没有更有效的方法来创建这本词典
例如,这是调用的示例:
if __name__=="__main__":
my_dict = create_dict()
print(my_dict)
既然您已经在使用集合,我建议您使用defaultdict:
输出
查看
dict.fromkeys
上的文档。返回的dict
中的所有键共享相同的值。您需要一个使用工厂而不是值的构造函数试试
my_dict = {i:{} for i in sides}
对于完整的解决方案,我将使用嵌套版本
请注意,如果顺序很重要,则上述命令仅适用于cpython3.6或更高版本,或任何符合python3.7或更高版本的命令。您可以在早期版本中使用
OrderedDict
,但它有性能损失另外请注意,在默认参数中使用列表或其他可变类型通常被认为是不好的形式,因此您可能需要
相反
相关问题 更多 >
编程相关推荐