data = [{'USA': [{'accommodations': '2 BR ','Price': 1245},
{'accommodations': '5 BR ','Price': 1045}]},
{'Dubai': [{'accommodations': '2 BR | Sleeps 6','Price': 966},
{'accommodations': '5 BR | Sleeps 6','Price': 800}]}]
我想在Price的基础上对上述数据进行排序。
我知道我必须做这样的事情,但我因为嵌套字典和列表而感到困惑。
sorted(data, key=lambda k: k["Price"])
此外,只需要排序列表的第一个(即最小)值条目。
预期产出:
data = [{'usa': {'accommodations': '5 BR ','Price': 1045}},
{'Dubai':{'accommodations': '5 BR | Sleeps 6','Price': 800}}]
答案 0 :(得分:2)
由于数据性质相当复杂,您可以使用 dict comprehension (其中只保留每个国家/地区的最低价格(基于价格)),在列表理解< / em>(遍历所有国家/地区):
>>> [{k: min(v, key=lambda x: x["Price"]) for k, v in item.items()} for item in data] [{'USA': {'accommodations': '5 BR ', 'Price': 1045}}, {'Dubai': {'accommodations': '5 BR | Sleeps 6', 'Price': 800}}]
<强>资源强>:
答案 1 :(得分:1)
这是使用列表推导的一种方式。由于您的词典每个都包含一个项目,因此我们提取第一个键和第一个值。或者,您可以使用next(iter(d.keys()))
/ next(iter(d.values()))
。
from operator import itemgetter
# sort increasing by price
res = [{list(item.keys())[0]: sorted(list(item.values())[0], key=itemgetter('Price'))}
for item in data]
# get lowest price
res = [{list(item.keys())[0]: min(list(item.values())[0], key=itemgetter('Price'))}
for item in data]
print(res)
[{'USA': {'accommodations': '5 BR ', 'Price': 1045}},
{'Dubai': {'accommodations': '5 BR | Sleeps 6', 'Price': 800}}]
答案 2 :(得分:1)
您可以使用min
:
data = [{'USA': [{'accommodations': '2 BR ','Price': 1245},
{'accommodations': '5 BR ','Price': 1045}]},
{'Dubai': [{'accommodations': '2 BR | Sleeps 6','Price': 966},
{'accommodations': '5 BR | Sleeps 6','Price': 800}]}]
final_data = [{a:min(b, key=lambda x:x['Price']) for a, b in i.items()} for i in data]
输出:
[{'Usa': {'accommodations': '5 BR ', 'Price': 1045}}, {'Dubai': {'accommodations': '5 BR | Sleeps 6', 'Price': 800}}]
答案 3 :(得分:1)
你可以试试这个
filteredData = []
for records in data:
for country, accommodations in records.items():
accommodations = sorted(accommodations, key=lambda k: k["Price"])
filteredData.append({country:accommodations[0]})