对于我的代码,我需要对许多包含键和值的数据行(来自.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)
上面的代码显示所有数据,我需要添加代码,这意味着它仅显示每个键的最大值
即
{键:最高价值}
从您的问题中不清楚,是否在一行中读取了键,并且在同一行中读取了多个值。或者如果您是说您仅从每行中读取一个键和单个值,并且该键可能再次出现在其他行上,并且您只想将该键映射到在多行中的任何一行上看到的最高值上。
根据您的评论,我假设每行都有一个键和值,但是该键可能会出现在另一行中。 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}
正如其他人所述,您应该发布数据样本。现在循环使用的方式没有多大意义-您正在使用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)
尝试下面的代码数据是包含键和值列表的字典
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