关于蟒蛇字典功能



我编写了以下东西来打印出字典('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(您使用[]用于lists;请改用{}
  • 将值分配给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}

最新更新