我将两个列表中的元素组合在一起,但是被拉入的元素本身就是一个子列表。我怎样才能把它列为清单的第[2]项?
我的代码:
list = [["pineapple", 10], ["cherry", 20], ["Carrot", 13], ["plum", 12]]
list1 = [["pineapple", 'Fruit'], ["cherry", 'Fruit'],["Carrot", 'Vegetable'],["plum", 'Fruit'],["Pepper", 'Vegetable']]
list = [[v1[0], v1[1], [v2[1] for v2 in list1 if v2[0] == v1[0]]] for v1 in list]
print list
我的输出:
[['pineapple', 10, ['Fruit']], ['cherry', 20, ['Fruit']], ['Carrot', 13, ['Vegetable']], ['plum', 12, ['Fruit']]]
期望的输出:
[['pineapple', 10, 'Fruit'], ['cherry', 20, 'Fruit'], ['Carrot', 13, 'Vegetable'], ['plum', 12, 'Fruit']]
答案 0 :(得分:5)
你可以只为该内部列表理解添加一个索引访问器,因此你得到该列表的第一个元素而不是整个列表:
# This part is new
# ↓↓↓
>>> [[v1[0], v1[1], [v2[1] for v2 in list1 if v2[0] == v1[0]][0]] for v1 in list]
[['pineapple', 10, 'Fruit'], ['cherry', 20, 'Fruit'], ['Carrot', 13, 'Vegetable'], ['plum', 12, 'Fruit']]
由于您基本上在查找水果类别,因此可以将list1
放入字典中。这允许您只需查找一个值,而无需遍历整个列表:
# to convert the existing `list1`
>>> categories = dict(list1)
# or specify it directly as a dictionary:
>>> categories = {'pineapple': 'Fruit', 'cherry': 'Fruit', 'Carrot': 'Vegetable', 'plum': 'Fruit', 'Pepper': 'Vegetable'}
然后您可以使用索引查找类别。例如categories['pineapple']
为您提供'Fruit'
。所以你可以在列表理解中使用它:
>>> [[v1[0], v1[1], categories[v1[0]]] for v1 in list]
[['pineapple', 10, 'Fruit'], ['cherry', 20, 'Fruit'], ['Carrot', 13, 'Vegetable'], ['plum', 12, 'Fruit']]
最后,请注意:您不应仅仅为list
命名变量。首先,list
是引用列表类型的内置变量,并且覆盖该变量的值可能会在以后引起很多混淆。其次,这实际上更重要,这些变量名称可以为您提供有关其内容的零信息。如果你恰当地命名它会更好,所以你知道它们包含什么以及它们用于什么。
答案 1 :(得分:0)
您可以使用词典来简化列表理解:
numbers = dict(list)
types = dict(list1)
result = {key:[numbers[key], types[key]] for key in numbers.keys()}
注意: 这只适用于"类型"拥有"数字"。
的所有键