将列表中具有多个字典的列表组合到单个列表python

时间:2019-05-07 04:50:46

标签: python python-3.x list dictionary

我有一个列表,列表中有多个字典。我想将列表合并为一个。在这里,我正在使用for循环合并但无法做到这一点。为我提供一些解决方案。在执行过程中,可以增加数据字典列表中的多重列表。所以我用for循环来获取它

这是示例代码:

datas = [
[{'state': 'tamil nadu', 'city': 'tirunelveli', 'haps': 'hap0', 'serial': '1'}, 
{'state': 'tamil nadu', 'city': 'nagerkoil', 'haps': 'hap0', 'serial': '2'}, 
{'state': 'tamil nadu', 'city': 'tuticorin', 'haps': 'hap0', 'serial': '3'}, 
{'state': 'tamil nadu', 'city': 'madurai', 'haps': 'hap0', 'serial': '4'},
{'state': 'tamil nadu', 'city': 'chennai', 'haps': 'hap0', 'serial': '5'}],
[{'state': 'kerala', 'city': 'palakad', 'haps': 'hap1', 'serial': '6'}, 
{'state': 'kerala', 'city': 'guruvayor', 'haps': 'hap1', 'serial': '7'}, 
{'state': 'kerala', 'city': 'kolikodu', 'haps': 'hap1', 'serial': '8'}, 
{'state': 'kerala', 'city': 'kottayam', 'haps': 'hap1', 'serial': '9'}, 
{'state': 'kerala', 'city': 'idukki', 'haps': 'hap1', 'serial': '10'}],
[]
]
d = []
def throttle(d):
    if data !=[]:
        d.append(data)
        print(d)
    else:
        print("no data")   

for data in datas:
    throttle(data)

我得到的输出:

[{'city': 'tirunelveli', 'serial': '1', 'haps': 'hap0', 'state': 'tamil nadu'}, {'city': 'nagerkoil', 'serial': '2', 'haps': 'hap0', 'state': 'tamil nadu'}, {'city': 'tuticorin', 'serial': '3', 'haps': 'hap0', 'state': 'tamil nadu'}, {'city': 'madurai', 'serial': '4', 'haps': 'hap0', 'state': 'tamil nadu'}, {'city': 'chennai', 'serial': '5', 'haps': 'hap0', 'state': 'tamil nadu'}, [...]]
[{'city': 'palakad', 'serial': '6', 'haps': 'hap1', 'state': 'kerala'}, {'city': 'guruvayor', 'serial': '7', 'haps': 'hap1', 'state': 'kerala'}, {'city': 'kolikodu', 'serial': '8', 'haps': 'hap1', 'state': 'kerala'}, {'city': 'kottayam', 'serial': '9', 'haps': 'hap1', 'state': 'kerala'}, {'city': 'idukki', 'serial': '10', 'haps': 'hap1', 'state': 'kerala'}, [...]]
no data

必填输出:

[{'city': 'tirunelveli', 'serial': '1', 'haps': 'hap0', 'state': 'tamil nadu'}, {'city': 'nagerkoil', 'serial': '2', 'haps': 'hap0', 'state': 'tamil nadu'}, {'city': 'tuticorin', 'serial': '3', 'haps': 'hap0', 'state': 'tamil nadu'}, {'city': 'madurai', 'serial': '4', 'haps': 'hap0', 'state': 'tamil nadu'}, {'city': 'chennai', 'serial': '5', 'haps': 'hap0', 'state': 'tamil nadu'},{'city': 'palakad', 'serial': '6', 'haps': 'hap1', 'state': 'kerala'}, {'city': 'guruvayor', 'serial': '7', 'haps': 'hap1', 'state': 'kerala'}, {'city': 'kolikodu', 'serial': '8', 'haps': 'hap1', 'state': 'kerala'}, {'city': 'kottayam', 'serial': '9', 'haps': 'hap1', 'state': 'kerala'}, {'city': 'idukki', 'serial': '10', 'haps': 'hap1', 'state': 'kerala'}]
no data

3 个答案:

答案 0 :(得分:4)

您可以这样做:

print([x for li in datas for x in li])

输出:

 [{'state': 'tamil nadu', 'city': 'tirunelveli', 'haps': 'hap0', 'serial': '1'}, {'state': 'tamil nadu', 'city': 'nagerkoil', 'haps': 'hap0', 'serial': '2'}, {'state': 'tamil nadu', 'city': 'tuticorin', 'haps': 'hap0', 'serial': '3'}, {'state': 'tamil nadu', 'city': 'madurai', 'haps': 'hap0', 'serial': '4'}, {'state': 'tamil nadu', 'city': 'chennai', 'haps': 'hap0', 'serial': '5'}, {'state': 'kerala', 'city': 'palakad', 'haps': 'hap1', 'serial': '6'}, {'state': 'kerala', 'city': 'guruvayor', 'haps': 'hap1', 'serial': '7'}, {'state': 'kerala', 'city': 'kolikodu', 'haps': 'hap1', 'serial': '8'}, {'state': 'kerala', 'city': 'kottayam', 'haps': 'hap1', 'serial': '9'}, {'state': 'kerala', 'city': 'idukki', 'haps': 'hap1', 'serial': '10'}]

答案 1 :(得分:3)

看起来是itertools.chain.from_iterable的一个好用例:

>>> from itertools import chain
>>> list(chain.from_iterable(datas))
[{'state': 'tamil nadu', 'city': 'tirunelveli', 'haps': 'hap0', 'serial': '1'}, {'state': 'tamil nadu', 'city': 'nagerkoil', 'haps': 'hap0', 'serial': '2'}, {'state': 'tamil nadu', 'city': 'tuticorin', 'haps': 'hap0', 'serial': '3'}, {'state': 'tamil nadu', 'city': 'madurai', 'haps': 'hap0', 'serial': '4'}, {'state': 'tamil nadu', 'city': 'chennai', 'haps': 'hap0', 'serial': '5'}, {'state': 'kerala', 'city': 'palakad', 'haps': 'hap1', 'serial': '6'}, {'state': 'kerala', 'city': 'guruvayor', 'haps': 'hap1', 'serial': '7'}, {'state': 'kerala', 'city': 'kolikodu', 'haps': 'hap1', 'serial': '8'}, {'state': 'kerala', 'city': 'kottayam', 'haps': 'hap1', 'serial': '9'}, {'state': 'kerala', 'city': 'idukki', 'haps': 'hap1', 'serial': '10'}]

答案 2 :(得分:1)

无法获得所需内容的原因是您在datas中嵌套了列表,因此应该扩展列表,而不是追加列表。

您可以尝试以下操作:

d = []
for data in datas:
    if data:
        d += data

或使用filterreducefilter用于过滤空列表,reduce用于组合。

from functools import reduce
import operator
d = list(reduce(operator.__add__, filter(None, datas)))