我有一個格式如下的 Python 字典:
my_dict = {'name': ['apple', 'orange', 'banana'],
'quantity': [20, 10, 30],
'price': [45, 50, 75]}
我首先想根據以下結果對水果進行排名,quantity以便最終得到如下輸出:
['banana', 'apple', 'orange']
然后我想列印出排名的水果以及它們的數量和價格,使其看起來像:
>>> banana:
price: 75
quantity: 30
apple:
price: 45
quantity: 20
orange:
price: 50
quantity: 10
到目前為止我嘗試過的:
attempt = sorted(my_dict.items(), key=lambda x:x[0])
sorted(my_dict.items(), key=lambda t: t[::-1])
uj5u.com熱心網友回復:
您可以使用 zip 組合 3 個鍵的串列元素,并對來自 map() 函式的元組進行排序(將數量作為第一個元素)。然后遍歷理解中的那些以格式化并列印結果:
my_dic = {'name':['apple', 'orange', 'banana'],
'quantity':[20, 10, 30],
'price': [45, 50, 75]}
print(*( f"{n}:\nprice: {p}\nquantity: {q}\n"
for q,n,p in sorted(zip(*map(my_dic.get,('quantity','name','price'))),
reverse=True) ),
sep='\n')
banana:
price: 75
quantity: 30
apple:
price: 45
quantity: 20
orange:
price: 50
quantity: 10
uj5u.com熱心網友回復:
這是使用方法之一pandas DataFrame:
import pandas as pd
my_dic = {'name':['apple', 'orange', 'banana'],
'quantity':[20, 10, 30],
'price': [45, 50, 75]}
# Convert to DataFrame
df = pd.DataFrame(my_dic)
# Sort based on quantity
df = df.sort_values(by=['quantity'], ascending=False)
# Get a dict format of dataframe and print as required
my_dic = df.to_dict('dict')
print (my_dic['name'].values())
for key in my_dic['name'].keys():
print (my_dic['name'][key])
print (f"price: {my_dic['price'][key]}")
print(f"quantity: {my_dic['quantity'][key]}")
輸出:
dict_values(['banana', 'apple', 'orange'])
banana
price: 75
quantity: 30
apple
price: 45
quantity: 20
orange
price: 50
quantity: 10
uj5u.com熱心網友回復:
你可以這樣做:
extracted_dict = {name: {'price': my_dic['price'][i], 'quantity': my_dic['quantity'][i]} for i, name in enumerate(my_dic['name'])}
這給了你這樣的東西:
{'apple': {'price': 45, 'quantity': 20}, 'orange': {'price': 50, 'quantity': 10}, 'banana': {'price': 75, 'quantity': 30}}
然后你可以排序:
print(sorted(extracted_dict, key=lambda x: extracted_dict[x]['quantity']))
uj5u.com熱心網友回復:
哦...我是第四...
d = {'name':['apple', 'orange', 'banana'],
'quantity':[20, 10, 30],
'price': [45, 50, 75]}
r = []
for a,b,c in zip(d['name'],d['quantity'],d['price']):
r.append({'name': a,'quantity': b,'price': c})
sorted_r = sorted(r, key=lambda x: -x['quantity'])
for a in sorted_r:
print(a['name'])
print(a['quantity'])
print(a['price'])
print('----')
banana
30
75
----
apple
20
45
----
orange
10
50
----
uj5u.com熱心網友回復:
這是我對解決方案的建議,有點冗長,但希望非常清楚:
import pprint
# Your original dictionary
my_dic = {'name':['apple', 'orange', 'banana'],
'quantity':[20, 10, 30],
'price': [45, 50, 75]}
# Convert that info into a better structure
fruits = {}
for index, fruit in enumerate(my_dic["name"]):
fruits[fruit] = {
"quantity": my_dic["quantity"][index],
"price" : my_dic["price"][index]
}
# Print out how it looks now
pprint.pprint(fruits)
# get your sorted list
fruit_names = sorted(my_dic["name"])
# and do the print out of the data
for name in fruit_names:
print(f"\n{name}:")
print(f"price: {fruits[name]['price']}")
print(f"quantity: {fruits[name]['quantity']}")
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324091.html
上一篇:無法理解燒瓶邏輯
