我是一个Python新手。作为一个有趣的练习,我想我会从元组列表中创建一个字典列表。我几乎不知道我会把头撞到墙上几个小时。
boys = [("Joe", 7, 125), ("Sam", 8, 130), ("Jake", 9, 225)]
keys = ("Name","Height","Weight")
boyz = []
for x in boys:
z = dict(zip(keys,boys[x]))
boyz.append(z)
print(boyz)
当男孩[x]"被一个整数替换,它很好用,但用for循环中的变量替换它不会起作用。为什么??我特别喜欢这个答案。但是如果能够更简洁地写出这一切,请告诉我。
答案 0 :(得分:2)
在for x in boys
循环的每次迭代中,x
将是列表中下一个元组的值。它不是可以用作索引的整数。在x
中使用boys[x]
代替zip
即可获得所需的结果。
for x in boys:
z = dict(zip(keys,x))
boyz.append(z)
答案 1 :(得分:1)
您使用boys[x]
代替x
。
这引发了错误:
TypeError: list indices must be integers, not tuple
以下是您编辑的代码:
boys = [("Joe", 7, 125), ("Sam", 8, 130), ("Jake", 9, 225)]
keys = ("Name","Height","Weight")
boyz = []
for x in boys:
z = dict(zip(keys,x))
boyz.append(z)
print(boyz)
运行如下:
>>> boys = [("Joe", 7, 125), ("Sam", 8, 130), ("Jake", 9, 225)]
>>> keys = ("Name","Height","Weight")
>>> boyz = []
>>> for x in boys:
... z = dict(zip(keys,x))
... boyz.append(z)
...
>>> print(boyz)
[{'Name': 'Joe', 'Weight': 125, 'Height': 7}, {'Name': 'Sam', 'Weight': 130, 'Height': 8}, {'Name': 'Jake', 'Weight': 225, 'Height': 9}]
>>>
答案 2 :(得分:0)
最终,您的目标是获取可迭代的键和值以传递到zip。
dict(zip(keys, values))
答案 3 :(得分:0)
如您所知,可以使用列表理解来实现更简洁的版本。
boyz = [dict(zip(keys, boy)) for boy in boys]
通常,当您看到创建空列表的模式,迭代某个iterable并在map / filtering之后附加其值时,您可以改为使用列表推导。
此:
new_list = []
for item in iterable:
if condition(item):
new_value = mapping(item)
new_list.append(new_value)
相当于:
new_list = [mapping(item) for item in iterable if condition(item)]