【发布时间】:2017-12-06 17:24:31
【问题描述】:
我有一个字典列表
[
{"day":"10", "car":"bmw", "count":"3"},
{"day":"10", "car":"audi", "count":"2"},
{"day":"10", "car":"jeep", "count":"4"},
{"day":"11", "car":"bmw", "count":"6"},
{"day":"11", "car":"audi", "count":"7"},
{"day":"11", "car":"jeep", "count":"8"},
]
我想把它转换成这样(期望的输出)
[
{"day":"10", "bmw":"3","audi":"2","jeep":"4"},
{"day":"11","bmw":"6","audi":"7","jeep":"8"},
]
这就是我所做的。有没有更好和最优的方法来实现这一点。
def dl():
list_of_dicts = [
{"day":"10", "car":"bmw", "count":"3"},
{"day":"10", "car":"audi", "count":"2"},
{"day":"10", "car":"jeep", "count":"4"},
{"day":"11", "car":"bmw", "count":"6"},
{"day":"11", "car":"audi", "count":"7"},
{"day":"11", "car":"jeep", "count":"8"},
]
result = []
data = {}
for item in list_of_dicts:
if not data.get(item["day"], False):
data[item["day"]] = []
data[item["day"]].append({item["car"]:item["count"]})
else:
data[item["day"]].append({item["car"]:item["count"]})
for key in data:
new_dict = {}
new_dict["day"] = key
for item in data[key]:
new_dict.update(item)
result.append(new_dict)
print result
return result
dl()
如果问题不正确,请帮助我
纠正这个问题。我是初学者
【问题讨论】:
-
提供您至少尝试过的代码示例,我们会为您提供帮助。否则你实际上是在要求我们做你的功课。
-
每当我尝试总结一些东西(在 JavaScript 和/或 Python 中)时,我总是尝试查看 reduce 函数。 (学习 map、reduce 和 filter 函数——它们对于数组/列表操作都很方便)看看这个:book.pythontips.com/en/latest/map_filter.html
-
您确实需要阅读MCVE documentation。但要回答,请将 reduce 与偏函数一起使用。
from functools import partial, reduce; def f(day, x, y): x.update({y['car']: y['count']}) if y['day'] == day else x; return x; days = {dict_['day'] for dict_ in dict_list}; output = [reduce(partial(f, day), dict_list, {'day': day}) for day in days] -
你的意思是它不是初学者提问的平台。它仅供专家使用。 @martineau,
-
这无疑是一个供初学者就他们编写的代码提出问题的平台。它不是任何人(无论是否是初学者)让其他人为他们工作的平台。这一切都在您注册时显示的教程中得到了清楚的解释。
标签: python python-3.x python-2.7 list dictionary