我有一个对象列表,如下所示:
[
{"title":"cdap_tests", "datacenter":"B1", "count_failed": 1},
{"title":"cdap_tests", "datacenter":"G1", "count_failed": 1},
{"title":"cdap_tests", "datacenter":"GOV1", "count_failed": 1},
{"title":"developer_portal_tests", "datacenter":"B1", "count_failed": 1}
]
我想将具有相同标题属性的对象组合在一起,如下所示:
[
{"title":"cdap_tests", "datacenter":"B1,G1,GOV1", "count_failed": 1},
{"title":"developer_portal_tests", "datacenter":"B1", "count_failed": 1}
]
我尝试根据它们的属性将每个字符串与另一个字符串进行比较,如果它们相同,则将字符串添加到另一个字符串,但由于某种原因它没有组合它们,我只是从函数中获取相同的数据返回
new_data_list = []
for row_to_compare_to in data:
for row_to_compare_from in data:
if row_to_compare_from["datacenter"] == row_to_compare_to["datacenter"]:
pass
elif row_to_compare_from["title"] == row_to_compare_to["title"]:
row_to_compare_to["datacenter"] = f"{row_to_compare_from['datacenter']}, {row_to_compare_to['datacenter']}"
row_to_compare_to["count_failed"] = f"{row_to_compare_from['count_failed']}, {row_to_compare_to['count_failed']}"
new_data_list.append(row_to_compare_to)
return new_data_list
有人能指出我做错了什么吗?或者更简洁的解决方案?
答案 0 :(得分:0)
该代码产生错误,因为 "count_failed"
并非在每个字典中。
如果我从头开始,我可能会将原始 data
列表替换为字典字典,其中外部字典的键是每个条目的标题。这将导致代码更易于阅读。我也可能将像 "B1,G1,GOV1"
这样的附加数据变成一个列表,而不是 ["B1", "G1", "GOV1"]
。
我确定我的方法不是最有效的或 Pythonic 的,但我相信它有效:
new_data_list = []
for raw_dct in data:
if raw_dct['title'] in [dct['title'] for dct in new_data_list]:
for new_dct in new_data_list:
if raw_dct['title'] == new_dct['title']:
for k, v in raw_dct.items():
if k in new_dct.keys():
if type(v) is str:
if v not in new_dct[k]:
new_dct[k] += "," + str(v)
if type(v) is int:
new_dct[k] += v
else:
new_dct[k] = v
else:
new_data_list.append(raw_dct)
它给出了你想要的 new_data_list
,同时也考虑了像 "count_failed"
这样的整数属性的计数。