比较嵌套di中的最小值

2024-10-03 15:34:00 发布

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

我有一个成对字典的列表,它是这样的:

[{'Anna': {'star': 5, 'banana': 12, 'bag': 7}, 'Ben': {'star': 5, 'banana': 12, 'melon': 1}},
 {'Anna': {'star': 5, 'banana': 12, 'bag': 7}, 'Cam': {'star': 65, 'melon': 1}},
 {'Anna': {'star': 5, 'banana': 12, 'bag': 7}, 'Den': {'juice': 0, 'cake': 4}}, ...]

我需要比较最小值(分数)的配对,但我们只关注焦点人物中的项目,在本例中是Anna。你知道吗

以第一对为例

“安娜”和“本”的共同点是“星星”和“香蕉”。因为我们只关心焦点人物“安娜”,所以我们只需要找到“明星”、“香蕉”和“包”的最小值。你知道吗

然后,在比较最小值对后,用1减去:

Ans = 1 - min('star':[5/24, 5/18], 'banana':[12/24, 12/24], 'bag':[7/24, 0])

所以理想的结果是

Anna-Ben = Ans1
Anna-Cam = Ans2
Anna-Den = Ans3
       .
       .
       .
       .

你知道怎么做吗?非常感谢你,对不起我的英语!你知道吗

*编辑:

嗨,谢谢你的回复,但是我想要的是1减去每一项的最小值。就像安娜·本的那对

[5/24,5/18]之间的“星”的最小值是5/24

[12/24,12/18]之间的“香蕉”最小值为12/24,且

[7/24,0]之间“bag”的最小值为0(只有安娜有bag,本没有bag,所以为零)。你知道吗

我们忽略了“本”中的“甜瓜”项,因为我们只关注焦点人物“安娜”。你知道吗

所以最终的结果应该是[1-5/24-12/24-0=7/24]。你知道吗


Tags: 列表字典分数juicestarbananabagben
1条回答
网友
1楼 · 发布于 2024-10-03 15:34:00

我希望我正确地理解了你的问题。你知道吗

data = [
  {'Anna': {'star': 5, 'banana': 12, 'bag': 7}, 'Ben': {'star': 5, 'banana': 12, 'melon': 1}},
  {'Anna': {'star': 5, 'banana': 12, 'bag': 7}, 'Cam': {'star': 65, 'melon': 1}},
  {'Anna': {'star': 5, 'banana': 12, 'bag': 7}, 'Den': {'juice': 0, 'cake': 4}}
]

results = {}
# iterate over each pair
for pair in data:
  anna_data = pair.pop("Anna")
  other_name, other_data = pair.popitem()  # get comparing data

  result = 1
  anna_sum = float(sum(anna_data.values()))
  other_sum = float(sum(other_data.values()))

  # iterate over each of anna's item
  for item, anna_val in anna_data.items():
    other_val = other_data.get(item, 0)  # set 0 if the item is not found in other_data
    min_item = min(anna_val/anna_sum, other_val/other_sum)
    result -= min_item
  # save the result to a wonderful dict
  key = "Anna-%s" % other_name
  results[key] = result
print(results)

结果:

{'Anna-Ben': 0.29166666666666663, 'Anna-Cam': 0.7916666666666666,'Anna-Den': 1.0}

顺便说一下,我销毁了数据列表,如果你想保持它的完整性,请在计算之前复制一个。你知道吗

相关问题 更多 >