合并两个字典列表并更新键 - python

我有两份字典,解释了某人及其角色,例如,在L1下面显示了D指示的驾驶员角色,L2显示了P的包装工:

L1 = [
    {'D': 'Jim Jones'}, 
    {'D': 'Tom Jones'},
    {'D': 'Bob Jones'}
]

L2 = [
    {'P': 'Jim Jones'},
    {'P': 'Bob Jones'}
]

我想合并字典列表,以便密钥是其角色的合并密钥,例如:

L3 = [
    {'DP': 'Jim Jones'}, 
    {'D': 'Tom Jones'},
    {'DP': 'Bob Jones'}
]

顺序无关紧要,这可以是新列表,也可以就地完成

参考方案

这应该完成工作:

>>> scratch = {v : k for d in L1 for k, v in d.items()}
>>> for d in L2:
        for k, v in d.items():
            if v not in scratch:
                scratch['v'] = ''
            scratch[v] += k

>>> result = [{v: k} for k, v in scratch.items()]
>>> result
[{'DP': 'Jim Jones'}, {'D': 'Tom Jones'}, {'DP': 'Bob Jones'}]

它在做什么:

步骤1)以名称为关键字建立暂存字典:

scratch = {'Jim Jones': 'D', 'Tom Jones': 'D', 'Bob Jones': 'D'}

步骤2)循环遍历L2中的名称,然后从头开始查找名称并更新其值。

scratch['Jim Jones'] += 'P'

步骤3)将草稿字典重新变成字典列表:

result = [{'DP': 'Jim Jones'}, {'D': 'Tom Jones'}, {'DP': 'Bob Jones'}]

解决问题的关键

核心思想是名称应该是单个字典中的键。这样可以轻松进行查找和更新。

希望这可以帮助 :-)

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

Python ThreadPoolExecutor抑制异常 - python

from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED def div_zero(x): print('In div_zero') return x / 0 with ThreadPoolExecutor(max_workers=4) as execut…