我无法理解以下示例代码的输出:
def g1():
d = {'a':1, 'b':2, 'c':3}
yield d
for a,b,c in g1():
print a,b,c
在Python 2.7.14中,上面会打印出来
a c b
这种行为有两个有趣的方面:
a c b
整数a b c
的整数,因为我们正在讨论字典密钥,所以应该是这种情况。d = {'a':1, 'b':2, 'c':3}
,然后编写for a,b,c in d:
,那么这将是一个valueError。答案 0 :(得分:2)
第一点: dicts在Python 2.7中没有排序。在3.7 +之前不要依赖它。
第二点:生成器g1()
,在迭代时,产生一个字典。建议的备选方案:
for a,b,c in d:
...
是苹果到橙子,这是迭代字典本身。对于在这里解压缩的等效鸭子,你需要一个在迭代时返回字典的对象:
for a,b,c in [d]:
...
答案 1 :(得分:1)
1。)在Python 2.7中,字典是无序的。
2。)for a,b,c in d:
会给你一个错误,因为你试图将字典中的键解包为三个变量,这是行不通的。但是,您可以执行for a, b in d.items()
,因为它返回元组对列表。
答案 2 :(得分:1)
OrderedDict
库下的内置类collections
。