以下是示例代码1及其结果。
d ={
"name":"looser",
"roll":6666,
"profile" : "developer"
}
print("list formatted dict is {}".format([d]))
for k,v in [d.items()]:
if d[k] is "developer":
d.pop(k)
else:
print(k)
结果:
list formatted dict is [{'name': 'looser', 'roll': 6666, 'profile': 'developer'}]
Traceback (most recent call last):
File "/Users/rough/try.py", line 18, in <module>
for k,v in [d.items()]:
ValueError: too many values to unpack (expected 2)
Process finished with exit code 1
以下是修改后的代码示例代码。
d ={
"name":"looser",
"roll":6666,
"profile" : "developer"
}
print("list formatted dict is {}".format([d]))
for k,v in list(d.items()):
if d[k] is "developer":
d.pop(k)
else:
print(k)
结果:
list formatted dict is [{'name': 'looser', 'roll': 6666, 'profile': 'developer'}]
name
roll
Process finished with exit code 0
在许多地方,人们告诉我没有区别,是否真的没有区别。如果没有区别那么为什么会有这样的结果。
因为一个人正在解决我的问题 ** RuntimeError:字典在迭代期间改变了大小**
答案 0 :(得分:4)
几乎没有区别:
a = list()
和
a = []
除了名称查找与内置[]
(Why is [] faster than list()?)
但如果您将任何项目传递给list
,则list
会尝试迭代以构建新列表。
来自help(list)
输出:
班级列表(对象)
| list() - &gt;新的空列表
| list(iterable) - &gt;从iterable的项目初始化的新列表
创建list
对象时有2个“模式”。
尝试list(3)
您将收到TypeError: 'int' object is not iterable
错误,请尝试[3]
您将获得一个包含1个元素的列表。
传递d.items()
对象时没有什么不同。
list(d.items())
将项目迭代/转换为元组列表。[d.items()]
创建一个包含单个元素的列表:d.items()
(这解释了解压缩到2个元素失败)另请注意,除非您想要在字典上进行迭代时删除字典,否则不需要for k,v in list(d.items()):
(这似乎是您遇到的问题,看到您最近的编辑)
除了这种情况之外,不需要转向列表,因为d.items()
已经可以迭代,并且将它包装在列表中没有任何用处(而且它甚至更慢)
答案 1 :(得分:1)
[]
是一个文字,它将完全按照您的定义创建列表。 ['a']
是包含一个项目的列表。 [d.items()]
也是一个包含一个项目的列表。这一项是很多项目,但无法解压缩只是k, v
。
list()
是构造函数表单,它使用可迭代来创建新列表。 list('a')
等于['a']
。 list('ab')
等于['a', 'b']
;它遍历可迭代字符串'ab'
。 list(d.items())
遍历d.items()
中的所有项目并创建列表[('name', 'looser'), (...)]
;这是一个包含许多两项元组的列表,它们分别解压缩到k, v
。