[英]Sort list of values in a dictionary
假設我有以下字典:
diction = {"string": ["alabama", "fruit", "emoji"], "number": [9, 13, 20]}
如何獲得一個字典,其中“數字”鍵的值按降序排序,“字符串”應該按照排序的數字鍵排序? 字符串和數字鍵鏈接
我想得到
diction = {"string": ["emoji", "fruit", "alabama"], "number": [20, 13, 9]}
我很感激。
使用由diction['number']
選擇的另一個列表排序:
diction["string"] = [x for _,x in sorted(zip(diction['number'],
diction['string']),
key=lambda pair: pair[0],
reverse=True)]
diction["number"] = sorted(diction["number"], reverse=True)
print (diction)
{'string': ['emoji', 'fruit', 'alabama'], 'number': [20, 13, 9]}
或使用pandas
:
import pandas as pd
d = pd.DataFrame(diction).sort_values('number', ascending=False).to_dict(orient='list')
print (d)
{'string': ['emoji', 'fruit', 'alabama'], 'number': [20, 13, 9]}
這是獲得所需 output 的方法。
from collections import defaultdict
diction = {"string": ["alabama", "fruit", "emoji"], "number": [9, 13, 20]}
d = defaultdict(list)
for strng, num in zip(diction["string"], diction["number"]):
d[strng].append(num)
d = dict(sorted(d.items(), key=lambda x: x[1], reverse=True))
diction = {"string": [k for k in d.keys()], "number": [j[0] for j in d.values()]}
print(diction)
輸出:
{'string': ['emoji', 'fruit', 'alabama'], 'number': [20, 13, 9]}
sorted
會正常工作。
diction["number"] = sorted(diction["number"])
對於將基於排序其中一個的重新排序對字典中的所有列表進行排序的通用方法,您可以以新的排序順序構建索引列表並將其應用於所有列表:
diction = {"string": ["alabama", "fruit", "emoji"], "number": [9, 13, 20]}
keys = diction["number"] # list to sort
order = sorted(range(len(keys)),key=lambda i:keys[i],reverse=True) # indexes
for lst in diction.values():
lst[:] = [lst[i] for i in order] # apply new order to all lists
print(diction)
{'string': ['emoji', 'fruit', 'alabama'], 'number': [20, 13, 9]}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.