为字典python中的每个键选择最大值

问题描述 投票:2回答:3

对于我的代码,我需要对许多包含键和值的数据行(来自.csv文件)进行排序。但是,每个键都有许多值。我需要形成可以循环并形成字典的代码,在该字典中,每个键只打印最高值的键。

dict = {}

for i in dict:
    dict.update({i: 0})

for line in data:
    dict = line.split(",")
    value = int(data[14]) 
    key = int(data[3])
    dict.update({key: value})

print(maximum_population)

上面的代码显示所有数据,我需要添加代码,这意味着它仅显示每个键的最大值

{键:最高价值}

python python-3.x csv dictionary
3个回答
1
投票

从您的问题中不清楚,是否在一行中读取了键,并且在同一行中读取了多个值。或者如果您是说您仅从每行中读取一个键和单个值,并且该键可能再次出现在其他行上,并且您只想将该键映射到在多行中的任何一行上看到的最高值上。

根据您的评论,我假设每行都有一个键和值,但是该键可能会出现在另一行中。 I.E每行都没有唯一的键,并且您想要键的最大值。

为此,我只是将数据压缩成对,就像它们在同一行上一样。原理是相同的,如果我们从未见过此键,则将其与值一起存储,否则,如果我们已看到此键且此值高于我们之前所见的值,请更新此键的值

keys = "5 6 6 3 3 6 6 4 2 2 5 7 7 8 8 6 3 6 4 3 9 15 13"
values = "232315 23 231723 25 232389 19 231819 232368 30 232370 231864 16 230150 14 230191 230688 228461 227789 226375 226928 225213 225174 223570"
data = zip((int(key) for key in keys.split()), (int(value) for value in values.split()))
my_highest_values = {}

for key, value in data:
    print("#", key, value)
    if key in my_highest_values:
        if value > my_highest_values[key]:
            my_highest_values[key] = value
    else:
        my_highest_values[key] = value

print(my_highest_values)

输出

{5: 232315, 6: 231819, 3: 232389, 4: 232368, 2: 232370, 7: 230150, 8: 230191, 9: 225213, 15: 225174, 13: 223570}

1
投票

正如其他人所述,您应该发布数据样本。现在循环使用的方式没有多大意义-您正在使用dict = line.split(",")创建列表,然后就没有使用它。

为了改进另一个答案,无需对任何值进行排序。使用max()可使此操作保持线性时间。

data_dict = {"k1": [1,2,3,4], "k2": [101, 2, 43], ...}
result = {key: max(values) for key, values in data_dict.items()}

如果要打印结果:

for k, v in result.items():
    print(k, v)

0
投票

尝试下面的代码数据是包含键和值列表的字典

e.g :: data = {1:[1,2,3,4],2:[8,7,6]}

def maximum_population(data):
    result={}
    for k,v in data.items():
        v.sort(reverse=True)
        result[k] = v[0]
    return result 
© www.soinside.com 2019 - 2024. All rights reserved.