我一直在尝试查看其他问题,但没有找到足以解决我问题的答案。我有一个包含许多键的字典列表,并且想返回仅包含其中三个键的字典列表。
dict_keys(['dropoff_datetime', 'dropoff_latitude', 'dropoff_longitude', 'fare_amount', 'imp_surcharge', 'mta_tax', 'passenger_count', 'payment_type', 'pickup_datetime', 'pickup_latitude', 'pickup_longitude', 'rate_code', 'tip_amount', 'tolls_amount', 'total_amount', 'trip_distance', 'vendor_id'])
我编写了一个名为parse_trips(trips)的函数,该函数返回仅具有以下属性的行程列表:
trip_distance
pickup_latitude
pickup_longitude
我已经尝试了很多次迭代,并且很乐意使用map或filter,但我尝试了许多尝试都没有成功。
def parse_trips(trips):
new_list = []
for trip in trips:
return trips['trip_distance'], trips['pickup_latidude'], trips['pickup_longitude']
parsed_trips = parse_trips(trips)
parsed_trips and parsed_trips[0]
这是我想要获得的输出
# {'pickup_latitude': '40.64499',
# 'pickup_longitude': '-73.78115',
# 'trip_distance': '18.38'}
答案 0 :(得分:2)
您可以通过字典理解来创建具有所需键及其相应值的字典,并将其添加到new_list
#List of keys you need
needed_keys = ['trip_distance', 'pickup_latitude', 'pickup_longitude']
#Iterate over trips list
for trip in trips:
#Create a dictionary with needed keys and their respective values and add it to result
new_list.append({k:trip[k] for k in needed_keys})
答案 1 :(得分:0)
您要确保目标字典中具有所有 键,因此您可以使用内置的all()
函数来验证目标键列表中的每个键是否需要存在。
然后只保留这些行程。
此后,您可以访问已解析的旅程中的任何字段。
needed_keys = ['trip_distance', 'pickup_latitude', 'pickup_longitude']
parsed_trips = [trip for trip in trips if all(key in trip for key in needed_keys)]
如果您只想在最终列表中返回这3个键,则可以使用以下方法将其拉出:
parsed_trips = [{k: trip[k] for k in needed_keys} for trip in trips if all(key in trip for key in needed_keys)]
尽管我认为列表/字典的理解开始变得冗长又难看,所以您可能希望改用传统的for
循环。
作为旁注,您总是可以跳过trip.get('target_field') is None
所在的任何行程,因为.get()
不会抛出索引错误,因为如果键输入默认返回None
不存在。
答案 2 :(得分:0)
needed_keys = ['trip_distance', 'pickup_latitude', 'pickup_longitude']
for d in dicts:
for k in [ key for key in d.keys() if not key in needed_keys ]:
d.pop( k, None )
MWE
keys = ['dropoff_datetime', 'dropoff_latitude', 'dropoff_longitude', 'fare_amount', 'imp_surcharge', 'mta_tax', 'passenger_count', 'payment_type', 'pickup_datetime', 'pickup_latitude', 'pickup_longitude', 'rate_code', 'tip_amount', 'tolls_amount', 'total_amount', 'trip_distance', 'vendor_id']
needed_keys = ['trip_distance', 'pickup_latitude', 'pickup_longitude']
dicts = []
for i in range(10):
dicts.append( { i:iii for iii,i in enumerate(keys) } )
for d in dicts:
for key in [ key for key in d.keys() if not key in needed_keys ]:
d.pop( key, None )