我有一个从csv导入数据集的任务,任务的最后一部分让我卡住了,特别是:
国家按人口最多(中国)到最少(罗马教廷)顺序排列
问题在于结果列表本身是按字母顺序(按国家)排列的,或者看起来是随机的。
# Create dictionary of data
data = {}
for i in range(len(countries)):
data[countries[i]] = population[i]
# Sort the dictionary by population size
sorted_data = sorted(data.items(), key=lambda x: x[1], reverse=True)
# Save and print the formated data
for i in range(len(sorted_data)):
outfile.write("{} ".format(i+1) + f'{sorted_data[i][0]:{50}} {sorted_data[i][1]:{50}}' + "n")
print("{} ".format(i+1) + f'{sorted_data[i][0]:{50}} {sorted_data[i][1]:{50}}' + "n")
我已经尝试将key=lambda x: x[1]
更改为key=lambda x: x[0]
,但这是按国家而不是人口计数排序的列表。
编辑:
赋值的csv来自这里:https://think.cs.vt.edu/corgis/csv/covid/
当前输出看起来像这样,但需要看起来像这样
此外,我不能在这个作业中使用pd。
假设您有一个字典,其中键是国家名称,值是人口,要通过减少人口来打印有序列表,您可以执行以下操作:
cd = {'A':12, 'B': 8, 'C':45, 'D': 4} # Sample Dictionary
sd = sorted(cd, key= lambda x: cd[x], reverse=True) # Sorted List of Keys
for k in sd:
print(f'Country: {k} has population {cd[k]}')
这会产生以下输出:
Country: C has population 45
Country: A has population 12
Country: B has population 8
Country: D has population 4
这里的解决方案非常简单。填充数据需要从str类型改为int类型。
# Create dictionary of data
data = {}
for i in range(len(countries)):
data[countries[i]] = int(population[i])
这允许对总体进行正确排序。