[英]Iterate through multiple list of dictionaries
我想遍歷字典列表以獲得特定值,但我無法弄清楚。
我已經制作了我一直在使用的簡化版本。 這些列表或更長,其中包含更多字典,但為了舉例,我希望這個縮短的數據集就足夠了。
listOfResults = [{"29":2523,"30":626,"10":0,"32":128},{"29":2466,"30":914,"10":0,"32":69}]
例如,我需要上面字典中鍵“30”的值。 我設法得到這些並將它們存儲在整數列表中。 ([626, 914])
這些整數基本上是 ID。 在此之后,我需要從另一個字典列表中獲取這些 ID 的值。
listOfTrack = [{"track_length": 1.26,"track_id": 626,"track_name": "Rainbow Road"},{"track_length": 6.21,"track_id": 914,"track_name": "Excalibur"}]
我想打印/存儲我之前從 listOfResults 獲得的 ID 的 track_names 和 track_lengths。 不幸的是,我最終陷入了完全混亂的 for 循環中。
你想要這樣的東西:
ids = [626, 914]
result = { track for track in list_of_tracks if track.get("track_id") in ids }
不幸的是,我無法評論 Nathaniel Ford 給出的答案,因為我是新用戶,所以我只是想在這里分享它作為答案。
他的回答基本上是正確的,但我相信你需要用括號替換花括號,否則你會得到這個錯誤: TypeError: unhashable type: 'dict'
答案應如下所示:
ids = [626, 914]
result = [track for track in listOfTrack if track.get("track_id") in ids]
listOfResults = [{"29":2523,"30":626,"10":0,"32":128},{"29":2466,"30":914,"10":0,"32":69}]
ids = [x.get('30') for x in listOfResults]
listOfTrack = [{"track_length": 1.26,"track_id": 626,"track_name": "Rainbow Road"},{"track_length": 6.21,"track_id": 914,"track_name": "Excalibur"}]
out = [x for x in listOfTrack if x.get('track_id') in ids]
或者,如果你要做很多這樣的事情,可能是時候學習一個新的庫了。
import pandas as pd
results_df = pd.DataFrame(listOfResults)
track_df = pd.DataFrame(listOfTrack)
這些看起來像:
# results_df
29 30 10 32
0 2523 626 0 128
1 2466 914 0 69
# track_df
track_length track_id track_name
0 1.26 626 Rainbow Road
1 6.21 914 Excalibur
現在我們可以回答您的問題:
# Creates a mask of rows where this is True.
mask = track_df['track_id'].isin(results_df['30'])
# Specifies that we want just those two columns.
cols = ['track_length', 'track_name']
out = track_df.loc[mask, cols]
print(out)
# Or we can make it back into a dictionary:
print(out.to_dict('records'))
Output:
track_length track_name
0 1.26 Rainbow Road
1 6.21 Excalibur
[{'track_length': 1.26, 'track_name': 'Rainbow Road'}, {'track_length': 6.21, 'track_name': 'Excalibur'}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.