将列表中包含多个dict的列表合并为单个列表

2024-05-23 17:27:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表,列表中有多个dict。我想把这张单子合并成一张。在这里,我使用for循环来合并,但无法这样做。帮我解决一些问题。数据中dict列表中的多个列表可以在执行期间增加。所以我用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

Tags: city列表fordataserialstatetamilkerala
3条回答

你可以做:

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'}]

看起来是^{}的一个很好的用例:

>>> 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'}]

无法获取所需内容的原因是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)))

相关问题 更多 >