我尝试以编程方式创建列表字典是不允许我单独地解决字典键.每当我创建列表字典并尝试附加到一个键时,所有这些都会更新.这是一个非常简单的测试用例:
data = {}
data = data.fromkeys(range(2),[])
data[1].append('hello')
print data
Run Code Online (Sandbox Code Playgroud)
实际结果: {0: ['hello'], 1: ['hello']}
预期结果: {0: [], 1: ['hello']}
这是有效的
data = {0:[],1:[]}
data[1].append('hello')
print data
Run Code Online (Sandbox Code Playgroud)
实际和预期结果: {0: [], 1: ['hello']}
为什么fromkeys方法不能按预期工作?
(我在这个网站上搜索+互联网,但找不到答案)
我从以下开始:
myList = ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
我想得到一些pythonic相当于的东西
a = []
b = []
c = []
Run Code Online (Sandbox Code Playgroud)
要么
a, b, c = ([] for i in range(3))
Run Code Online (Sandbox Code Playgroud)
那就是我想创建与原始列表中的元素一样多的列表,并使用(赋值?)原始列表中的元素作为创建列表的名称.
请问有什么建议吗?
Python 3.7.6(默认,2020 年 1 月 8 日,20:23:39)[MSC v.1916 64 位 (AMD64)]
my_list = ["a","b","c"]
dict_one = {key:[] for key in my_list}
print(dict_one)
{'a': [], 'b': [], 'c': []}
dict_two = dict.fromkeys(my_list, [])
print(dict_two)
{'a': [], 'b': [], 'c': []}
dict_one['a'].append('some_data')
dict_two['a'].append('some_data')
print(dict_one)
{'a': ['some_data'], 'b': [], 'c': []}
print(dict_two)
{'a': ['some_data'], 'b': ['some_data'], 'c': ['some_data']}
Run Code Online (Sandbox Code Playgroud)
我对 dict_one 和 dict_two 期望相同的结果。谁能解释一下区别?