我编写了以下东西来打印出字典('one' : 1, 'tow' : 2, 'three' : 3)
。 但是错误出来了。谁能回答为什么会这样?
length = []
class_one = [1, 2, 3]
class_two = ['one', 'two', 'three']
for x in class_one:
if x < 4:
length[class_two] = class_one
print(length)
length = {}
class_one = [1, 2, 3]
class_two = ['one', 'two', 'three']
for c1, c2 in zip(class_one, class_two):
if c1 < 4:
length[c2] = c1
print(length)
在这里,这为您提供了所需的输出。基本上,您正在迭代class_one
,然后尝试使用整个class_two
作为length
的键。在这里,您遍历两个数组并将值用作键
以下是代码的更正版本:
length = {}
class_one = [1, 2, 3]
class_two = ['one', 'two', 'three']
for i, x in enumerate(class_two):
length[x] = class_one[i]
print(length)
您的版本存在以下问题:
- 初始化
length dict
(您使用[]
用于list
s;请改用{}
。 - 将值分配给
dict
:使用整个list
作为key
这是错误的,因为list
是不可哈希的,无论如何都不是你想做的。
或者更简单、更优雅:
length = dict(zip(class_two, class_one))
这是在您的情况下最好的方法(忽略条件(。
他们都print
:{'one' : 1, 'two' : 2, 'three' : 3}
最后,您可以拥有如下所示的字典理解版本:
length = {k: v for k, v in zip(class_two, class_one)}
在人们可以想到的其他变化中。请注意,这对您的情况来说是矫枉过正。
有条件的
就条件而言,if x < 4:
不确定为什么你在那里有它,因为提供的示例输入没有意义,但如果你确实需要它,它很容易重新实现。
作为外观的示例,请查看以下内容:
length = {k: class_one[i] for i, k in enumerate(class_two) if class_one[i] < 4}
或较短的:
length = {class_two[i]: v for i, v in enumerate(class_one) if v < 4}
或更鸽子(甚至更短(:
length = {k: v for k, v in zip(class_two, class_one) if v < 4}