所以我有一个小数据,像这样:
data = [
{"Name":"Arab","Code":"Zl"},
{"Name":"Korea","Code":"Bl"},
{"Name":"China","Code":"Bz"}
]
我想找到一个图形,使x轴为:“ Bl”,“ Bz”,“ Zl”(字母顺序)
y轴是:“韩国”,“中国”,“阿拉伯”(对应代号)。
我想到了:
new_data = {}
for dic in data:
country_data = dic["Name"]
code_data = dic["Code"]
new_data[code_data] = country_data
code_data = []
for codes in new_data.keys():
code_data.append(codes)
code_data.sort()
name_data = []
for code in code_data:
name_data.append(new_data[code])
有更好的方法吗? 也许不创建新词典?
答案 0 :(得分:1)
所以这是数据:
data = [
{"Name":"Arab","Code":"Zl"},
{"Name":"Korea","Code":"Bl"},
{"Name":"China","Code":"Bz"}
]
要创建新的排序列表,请执行以下操作:
new_list = sorted(data, key=lambda k: k['Code'])
如果您不想获取新列表:
data[:] = sorted(data, key=lambda k: k['Code'])
结果是:
[{'Code': 'Bl', 'Name': 'Korea'}, {'Code': 'Bz', 'Name': 'China'}, {'Code': 'Zl', 'Name': 'Arab'}]
希望我能为您提供帮助!
答案 1 :(得分:0)
产生相同结果的更好方法:
from operator import itemgetter
data = [
{"Name": "Arab", "Code": "Zl"},
{"Name": "Korea", "Code": "Bl"},
{"Name": "China", "Code": "Bz"}
]
sorted_data = ((d["Code"], d["Name"]) for d in sorted(data, key=itemgetter("Code")))
code_data, name_data = (list(item) for item in zip(*sorted_data))
print(code_data) # -> ['Bl', 'Bz', 'Zl']
print(name_data) # -> ['Korea', 'China', 'Arab']
答案 2 :(得分:0)
这是使用operator.itemgetter
并通过zip
拆包的一种方法:
from operator import itemgetter
_, data_sorted = zip(*sorted(enumerate(data), key=lambda x: x[1]['Code']))
codes, names = zip(*map(itemgetter('Code', 'Name'), data_sorted))
print(codes)
# ('Bl', 'Bz', 'Zl')
print(names)
# ('Korea', 'China', 'Arab')