【发布时间】:2016-07-04 17:27:12
【问题描述】:
我有两个输入数据集,一个是列表 (list1),其中包含带有键和计数值的字典列表,
list1 = [{u'key': u'1', u'count': 2}, {u'key': u'2', u'count': 1}, {u'key': u'3', u'count': 5}]
另一个是字典(dict1),以数字(字符串)为键,状态字符串为值。
dict1 = {'1': "status1", '2': "status2", '3': "status3"}
我需要生成一个类似于 {"status_string": {"count": "", "percent": ""}} 的字典,其中 count 是根据 list1 中相应字典的键值计算的。例如对于 key == 1,我们得到 count == 2。百分比是根据从 total_count 开始的先前状态计数值计算的,请参阅下面的所需输出百分比。
期望的输出
result = {
"status1": {
"count": {
"value_from_list1_where_key = 1"
},
"percent": {
"(last_calculated_count / total_count)"
}
},
"status2": {
"count": {
"value_from_list1_where_key = 2"
},
"percent": {
"(last_calculated_count/status1_count)"
}
},
"status3": {
"count": {
"value_from_a_list_where_key = 3"
},
"percent": {
"(last_calculated_count/status2_count)"
}
}
}
以上示例的示例:
list1 = [{u'key': u'1', u'count': 2}, {u'key': u'2', u'count': 1}, {u'key': u'3', u'count': 5}]
dict1 = {'1': "status1", '2': "status2", '3': "status3"}
total_count = 10 #any integer value
result = {"status1": {"count": 2, "percent": 2/10},
"status2": {"count": 1, "percent": 1/2},
"status3": {"count": 5, "percent": 5/1}}
我可以通过在字典列表上正常循环然后放置 if/else 条件来检查和生成结果来获得所需的响应,但我不会觉得它很 Pythonic。任何人都可以建议什么是实现相同目标的最佳/pythonic 方式?
【问题讨论】:
-
list1 不是很pythonic。它基本上是一个键:值对列表(您认为应该放在字典中)。您想要一种重新设计数据结构的 Python 方式,还是按原样迭代它们的 Python 方式?
-
嗨,肯尼,感谢您的评论....实际上,list1 是弹性搜索聚合查询之一的结果,所以我只是在阅读它。顺便说一句,我们可以修改以适应要求...:)
标签: python dictionary