[英]How to get specific objects from two list of dictionaries on a specific key value?
I have two lists of dictionaries:我有两个字典列表:
timing = [
{"day_name": "sunday"},
{"day_name": "monday"},
{"day_name": "tuesday"},
{"day_name": "wednesday"},
{"day_name": "thursday"},
{"day_name": "friday"},
{"day_name": "saturday"},
]
hours_detail = [
{"day_name": "sunday", "peak_hour": False},
{"day_name": "monday", "peak_hour": False},
{"day_name": "tuesday", "peak_hour": False},
{"day_name": "wednesday", "peak_hour": False},
{"day_name": "thursday", "peak_hour": False},
{"day_name": "friday", "peak_hour": False},
{"day_name": "saturday", "peak_hour": False},
{"day_name": "saturday", "peak_hour": True},
{"day_name": "friday", "peak_hour": True},
{"day_name": "thursday", "peak_hour": True},
]
I want to create another list of dictionaries that looks like the one below.我想创建另一个字典列表,如下所示。 I'm basically combining these two lists and also rearranging according to the day name.
我基本上是将这两个列表结合起来,并根据日期名称重新排列。
final_data_object = [
{
"timing": {"day_name": "saturday"},
"hour_detail": [
{"day_name": "saturday", "peak_hour": False},
{"day_name": "saturday", "peak_hour": True},
]
},
{
"timing": {"day_name": "friday"},
"hour_detail": [
{"day_name": "friday", "peak_hour": False},
{"day_name": "friday", "peak_hour": True},
]
},
soon on...
]
I have tried this but it didn't work:我试过这个但没有用:
data = []
for time_instance in timing:
obj = {
"timing": time_instance
}
for hour_instance in hour_detail:
if time_instance["day_name"] == hour_instance["day_name"]:
obj["hour_detail"] = hour_instance
data.append(obj)
return data
If pricing = hour_detail
then obj["pricing"]
must be a list as it can have multiple value.如果
pricing = hour_detail
那么obj["pricing"]
必须是一个列表,因为它可以有多个值。
You have to create a new list in your loop for time_instance in timing:
and append every time time_instance["day_name"] == pricing_instance["day_name"]
.您必须在循环
for time_instance in timing:
和 append 每次time_instance["day_name"] == pricing_instance["day_name"]
创建一个新列表。
Exemple:例子:
data = []
for time_instance in timing:
current_hour_detail = []
for line in hours_detail:
if line["day_name"] == time_instance["day_name"]:
current_hour_detail.append(line)
data.append({
"timing": time_instance,
"pricing": current_hour_detail
})
Or smaller way或者更小的方式
data = []
for time_instance in timing:
current_hour_detail = [line for line in hours_detail if line["day_name"] == time_instance["day_name"]]
data.append({
"timing": time_instance,
"pricing": current_hour_detail
})
Whatch out tho, this solution is in O(n*m) time complexity, by first transforming your list hours_detail
by a hashtable {day_name: [peak_hour1, peak_hour2]} you can reduce it in O(n+m)不过,此解决方案的时间复杂度为 O(n*m),首先通过哈希表 {day_name: [peak_hour1, peak_hour2]} 转换列表
hours_detail
,您可以将其减少为 O(n+m)
This should answer you question:这应该回答你的问题:
...
data = []
for time_instance in timing:
obj = {"timing": time_instance}
# use a list to store all your pricing
obj["hour_detail"] = []
for pricing_instance in pricing:
if time_instance["day_name"] == pricing_instance["day_name"]:
obj["hour_detail"].append(pricing_instance)
# add 'obj' after the loop
data.append(obj)
print(data)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.