将循环转换为列表理解

时间:2014-06-16 00:01:26

标签: python-3.x list-comprehension

我可以让这个循环正常工作:

for x in range(0,len(l)):
   for k in d:
      if l[x] in d[k]:
         l[x] = k

查看列表并检查该值是否在任何字典项中,然后计算它等于在其中找到的字典键(字典包含列表。)

但是,我想转换为列表推导或其他单行语句以在pandas数据框中使用 - 根据另一个字段的值是否在标记的字典键中填充字段并分配它字典键值。

这是我最好的尝试,但它不起作用:

l = [ k for x in range(0,len(l)) if l[x] in d[k] for k in d ]

由于

2 个答案:

答案 0 :(得分:1)

假设我理解你之后的事情(可以复制和粘贴的示例数据总是受到赞赏),我会做这样的事情:

>>> l = ["a", "b", "c", "d"]
>>> d = {1: ["a"], 3: ["d", "c"]}
>>> l2 = [next((k for k,v in d.items() if lx in v), lx) for lx in l]
>>> l2
[1, 'b', 3, 3]

如果在l中的多个列表中找到d中的条目,请不要忘记考虑您想要的行为,当然,尽管这可能不是您数据的问题

答案 1 :(得分:0)

你不能通过列表理解来完成它,因为你有一个任务:

l[x] = k

这是一个语句,列表理解不能拥有它们。