gpt4 book ai didi

python - 从字典中排除重复值并相应地增加 'qty' 字段

转载 作者:太空宇宙 更新时间:2023-11-04 05:55:29 26 4
gpt4 key购买 nike

考虑到 '1'、'2'、'3'、'4' 是索引,其他所有内容都作为 Python 中字典的值,我试图排除重复值并在发现重复。例如:

打开这个:

a = {'1': {'name': 'Blue', 'qty': '1', 'sub': ['sky', 'ethernet cable']},
'2': {'name': 'Blue', 'qty': '1', 'sub': ['sky', 'ethernet cable']},
'3': {'name': 'Green', 'qty': '1', 'sub': []},
'4': {'name': 'Blue', 'qty': '1', 'sub': ['sea']}}

进入这个:

b = {'1': {'name': 'Blue', 'qty': '2', 'sub': ['sky', 'ethernet cable']},
'2': {'name': 'Green', 'qty': '1', 'sub': []},
'3': {'name': 'Blue', 'qty': '1', 'sub': ['sea']}}

我能够排除重复项,但我很难增加“数量”字段:

b = {}

for k,v in a.iteritems():
if v not in b.values():
b[k] = v

P.S.:我之前发布了这个问题,但忘记补充说字典可以有一个“子”字段,它是一个列表。另外,不要介意奇怪的字符串索引。

最佳答案

首先,将原始字典的 'name''sub' 键转换为逗号分隔的字符串,这样我们就可以使用 set():

data = [','.join([v['name']]+v['sub']) for v in a.values()]

返回

['Blue,sky,ethernet cable', 'Green', 'Blue,sky,ethernet cable', 'Blue,sea']

然后使用嵌套的字典和列表理解如下:

b = {str(i+1): {'name': j.split(',')[0], 'qty': sum([int(qty['qty']) for qty in a.values() if (qty['name']==j.split(',')[0]) and (qty['sub']==j.split(',')[1:])]), 'sub': j.split(',')[1:]} for i, j in enumerate(set(data))}

关于python - 从字典中排除重复值并相应地增加 'qty' 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28049316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com