嵌套列表理解

时间:2017-07-08 07:52:30

标签: python list

我有两个名单,A和B.

  • A是包含值列表的字典列表。
  • B是一个简单的清单。

要求是将列表B的元素添加到A的字典值中。

以下是代码,

a = [{'a':[1,5]}, {'b' : [6,10]}, {'c' : [11,15]}]
b = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

for i in a:
  for k,j in i.items():
      for m,n in enumerate(b):
          if j[0]<= n<=j[1]:
              j.append(n)

print(a)

[{'a':[1,5,1,2,3,4,5]}, {'b' : [6,10,6,7,8,9,10]}, {'c' : 
[11,15,11,12,13,14,15]}]

# tried list comprehension
a= [{k:n} for i in a for k,j in i.items() for m,n in enumerate(b)
if j[0]<= n<=j[1]]

print(a)

[{'a': 1}, {'a': 2}, {'a': 3}, {'a': 4}, {'a': 5}, {'b': 6}, {'b': 7}, 
{'b': 8}, {'b': 9}, {'b': 10}, {'c': 11}, {'c': 12}, {'c': 13}, {'c': 
14}, {'c': 15}]

问题是这是否可以使用列表理解来完成?我已经尝试但无法生成所需的输出。

2 个答案:

答案 0 :(得分:3)

a = [{k: [ x for x in b if v[0] <= x <= v[1] ]} for d in a for k,v in d.items()]

答案 1 :(得分:2)

只需对@Błotosmętek答案进行一些小修改即可获得输出所需的内容。

a = [{'a': [1, 5]}, {'b': [6, 10]}, {'c': [11, 15]}]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

a = [{k: v+[x for x in b if v[0]<=x<=v[1]]} for d in a for k, v in d.items()]
print(a)

输出

[{'a': [1, 5, 1, 2, 3, 4, 5]}, {'b': [6, 10, 6, 7, 8, 9, 10]}, {'c': [11, 15, 11, 12, 13, 14, 15]}]