python - Python如何循环列表并将列表值的每2个用作参数?
问题描述
我有 2 个嵌套列表:
grouped1 ={'LabelStat': { 'Carrier': ['1', '1'],
'FormID': ['0201', '0430']},
'McAfee': {'DatDate': 'Not Available',
' DatVersion': 'Not Available'}
}
grouped2 ={'LabelStat': {'Carrier': ['2', '2'],
'FormID': ['10201', '10430']},
'McAfee': {'DatDate': 'Available',
'DatVersion': 'Available',}
}
一个函数将合并这两个列表并且它可以工作:
from collections import defaultdict
import re
def merge(*d):
v = defaultdict(list)
for i in d:
for a, b in i.items():
v[re.sub('^\s+', '', a)].append(b)
return {a:merge(*b) if all(isinstance(j, dict) for j in b)
else [i for j in b for i in (j if isinstance(j, list) else [j])]
for a, b in v.items()}
print(merge(grouped1, grouped2))
这个函数的输出是:
om_grouped = {
'LabelStat': {'Carrier': ['1', '1','2','2'],
'FormID': ['0201', '0430','10201', '10430']}
'McAfee': {'DatDate': ['Not Available','Available']
'DatVersion': ['Not Available','Available']}
}
所以现在字典的数量是固定的,在上面我有 2,但是如果这个数字是动态的,例如我也会有 grouped3:
grouped3 ={'LabelStat': {'Carrier': ['3', '3'],
'FormID': ['102013', '104303']},
'McAfee': {'DatDate': 'Available3',
'DatVersion': 'Available3',}
}
我的问题是如何修改合并函数以使参数动态化?
我试图将所有字典放在一个列表中:
dic_list = [grouped1,grouped2,grouped3]
然后使用地图功能:
combin = map(merge,d_list)
print(combin)
for i in combin:
print(i)
但输出是:
<map object at 0x000001AC43E7AF40>
{'LabelStat': {'Carrier': ['1', '1'], 'FormID': ['0201', '0430']}, 'McAfee': {'DatDate': ['Not Available'], 'DatVersion': ['Not Available']}}
{'LabelStat': {'Carrier': ['2', '2'], 'FormID': ['10201', '10430']}, 'McAfee': {'DatDate': ['Available'], 'DatVersion': ['Available']}}
{'LabelStat': {'Carrier': ['3', '3'], 'FormID': ['102013', '104303']}, 'McAfee': {'DatDate': ['Available3'], 'DatVersion': ['Available3']}}
解决方案
只需使用解包:
r = merge(*dic_list)
输出:
{'LabelStat': {'Carrier': ['1', '1', '2', '2', '3', '3'], 'FormID': ['0201', '0430', '10201', '10430', '102013', '104303']}, 'McAfee': {'DatDate': ['Not Available', 'Available', 'Available3'], 'DatVersion': ['Not Available', 'Available', 'Available3']}}
推荐阅读
- javascript - WebStorm 自动完成 Mongoose 模式字段
- doxygen - Doxygen 在选定的文件上重新运行
- filter - tableau - 在计算中使用过滤后的数据并进一步过滤
- inheritance - ServiceStack.OrmLite:选择在运行时确定类型的 POCO(继承)
- actions-on-google - 如何为谷歌操作代理履行 URL
- android - 启动服务而不显示任何通知
- plsql - 如何通过某个 Round up 因子进行 Roundup?
- web-services - 物理设备的网络服务,使用哪种技术/协议?
- php - 将 jQuery 计算的结果显示到表单中
- javascript - 从base64图像中提取数据