簡體   English   中英

遍歷多個字典列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM