我有两个不同的词典:
- 它显示品牌名称及其类型(即 Air 是品牌,鞋子是类型)
D1 = {'苹果': '手机', '三星': '手机', 'LG': '电视', '索尼': '电视'}
- 这显示产品名称以及该产品的订单数量。
D2 = {'苹果': 3, '三星': 5, 'LG': 1, '索尼': 2}
我想创建一个新字典(不使用 pandas),以显示给定类型最受欢迎的品牌以及相同类型的订单数量。最受欢迎的定义是总订单最多的品牌。如果两个或多个品牌(具有给定类型)具有相同的订单数量,请选择任何一个。
我尝试合并两个字典,如下所示:
{'三星': ['手机', 5], '苹果': ['手机', 3], '索尼': ['电视', 2], 'LG': ['电视', 1]}
我不确定这是否是正确的方法。如果是这样,我怎样才能从这个字典中获取所需的数据?
我用来将两个字典合并为一个的代码:
d3={}
for key in (d2:keys()|d1.keys()):
if key in d2: d3.setdefault(key, []).append(d2[key])
if key in d1: d3.setdefault(key, []).append(d1[key])
预期结果:-
{'三星': 5, '索尼': 2}
最佳答案
聚会有点晚了,但我认为我的是迄今为止最简单的😜
D1 = {'apple': 'phone', 'samsung': 'phone', 'LG': 'TV', 'sony': 'TV'}
D2 = {'apple': 3, 'samsung': 5, 'LG': 1, 'sony': 2}
most_popular = {}
for brand, type_ in D1.items():
orders = D2[brand]
current_winner = most_popular.get(type_, None)
if current_winner is None or orders > current_winner[1]:
most_popular[type_] = (brand, orders)
result = {brand: orders for type_, (brand, orders) in most_popular.items()}
print(result)
# {'samsung': 5, 'sony': 2}
对于 D1
中的每个品牌类型对,它会检查是否没有该产品类型的条目(在这种情况下我们将其放入其中)或如果该品牌的订单数量超过当前条目(在这种情况下,我们会使用新品牌更新该条目)。
末尾的行将此数据转换为结果的正确格式。
<小时/>编辑:
设法将其扁平化为非常脏的单行代码(不计算 most_popular
的初始分配):
D1 = {'apple': 'phone', 'samsung': 'phone', 'LG': 'TV', 'sony': 'TV'}
D2 = {'apple': 3, 'samsung': 5, 'LG': 1, 'sony': 2}
most_popular = {}
result = {brand: orders for type_, (brand, orders) in {type_: (brand, D2[brand]) for brand, type_ in D1.items() if not most_popular.get(type_, None) or D2[brand] > most_popular.get(type_, None)[1]}.items()}
print(result)
# {'samsung': 5, 'sony': 2}
关于python - 如何查找具有单个键的多个值的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57748849/