簡體   English   中英

將具有相同鍵但不同值的字典拆分到不同字典的列表

[英]Split list of dictionaries with identical keys but different values to different dictionaries

今天是個好日子。 我有一個包含不同游戲的字典列表。 比賽按順序進行。 每個游戲可以有不同數量的鍵。 字典中有幾個相同的鍵,但含義不同。 問題是我還沒有弄清楚如何使用特定的鍵將游戲分成不同的字典。

list = [{'SA': '1'}, {'ZA': 'AFRICA: African Nations Championship'}, {'ZEE': 'fZS33RAH'}, {'ZB': '1'}, {'ZY': 'Africa'}, {'ZC': 'AuZlotWi'}, {'ZD': 'p'}, {'ZE': 'hQF2OO7Q'}, {'ZF': '0'}, {'ZO': '0'}, {'ZG': '1'}, {'ZH': '1_fZS33RAH'}, {'ZJ': '2'}, {'ZL': '/football/africa/african-nations-championship/'}, {'ZX': '00Africa      006Africa0040000000001000African Nati028onship000'}, {'ZXF': '00Africa      006Africa0040000000001000African Nati028onship000'}, {'ZCC': '0'}, {'ZAF': 'Africa'}, {'AA': 'lv6E76jD'}, {'AD': '1611514800'}, {'ADE': '1611514800'}, {'AB': '3'}, {'CR': '3'}, {'AC': '3'}, {'CX': 'Burkina Faso'}, {'RW': '0'}, {'AX': '1'}, {'AO': '1611521595'}, {'BX': '-1'}, {'WQ': ''}, {'WM': 'BFA'}, {'AE': 'Burkina Faso'}, {'JA': 'vXsxyJv4'}, {'WU': 'burkina-faso'}, {'AS': '0'}, {'AZ': '0'}, {'GRA': '0'}, {'AG': '0'}, {'BA': '0'}, {'BC': '0'}, {'OA': '6FkKkDT0-d4SDTRYi.png'}, {'WN': 'CAM'}, {'AF': 'Cameroon'}, {'JB': 'INttzwfA'}, {'WV': 'cameroon'}, {'AS': '0'}, {'AZ': '0'}, {'GRB': '0'}, {'AH': '0'}, {'BB': '0'}, {'BD': '0'}, {'OB': '4MsJXS86-CMP7lutI.png'}, {'AA': 'jqpcWkTD'}, {'AD': '1611514800'}, {'ADE': '1611514800'}, {'AB': '3'}, {'CR': '3'}, {'AC': '3'}, {'CX': 'Zimbabwe'}, {'RW': '0'}, {'AX': '1'}, {'AO': '1611521438'}, {'BX': '-1'}, {'WQ': ''}, {'WM': 'ZIM'}, {'AE': 'Zimbabwe'}, {'JA': 'CptpZd9G'}, {'WU': 'zimbabwe'}, {'GRA': '0'}, {'AG': '0'}, {'BA': '0'}, {'BC': '0'}, {'OA': 'bBXMPUhT-QwFad6pm.png'}, {'WN': 'MAL'}, {'AF': 'Mali'}, {'JB': 'AVbmYGOM'}, {'WV': 'mali'}, {'AS': '2'}, {'AZ': '2'}, {'GRB': '0'}, {'AH': '1'}, {'BB': '1'}, {'BD': '0'}, {'OB': 'txCAqWjC-dWt4REwT.png'}, {'ZA': 'ALBANIA: Superliga'}, {'ZEE': 'nwPDBpVc'}, {'ZB': '17'}, {'ZY': 'Albania'}, {'ZC': 'ULkLo4dK'}, {'ZD': 'p'}, {'ZE': 'OKzcNHo0'}, {'ZF': '0'}, {'ZO': '0'}, {'ZG': '1'}, {'ZH': '17_nwPDBpVc'}, {'ZJ': '2'}, {'ZL': '/football/albania/superliga/'}, {'ZX': '00Albania     007lbania0000000000001000Superliga   009erliga000'}, {'ZXF': '00Albania     007lbania0000000000001000Superliga   009erliga000'}, {'ZCC': '0'}, {'ZAF': 'Albania'}]

游戲鍵是:

game_keys = ['AA', 'BA', 'BB', 'BC', 'BD', 'AB', 'AC', 'AG', 'AH', 'AT', 'AU', 'BI', 'BJ']

我試圖創建一個循環來檢查每個元素是否存在密鑰,但結果完全是胡說八道:

match = []
for item in list:
    game_keys = ['AA', 'BA', 'BB', 'BC', 'BD', 'AB', 'AC', 'AG', 'AH', 'AT', 'AU', 'BI', 'BJ']
    if item.keys() == game_keys[0]:
        match_id = list(item.values())[0]
    elif item.keys() == game_keys[1]:
        home_HT = list(item.values())[0]

是否可以使用“game_keys”將此字典列表與不同的字典(游戲)分開? 期望的結果:

games = [
{
    'match_id': 'lv6E76jD' # game_keys 'AA', 
    'home_HT': '0' # game_keys 'BA', 
    'away_HT': '0' # game_keys 'BB', 
    'home_ST': '0' # game_keys 'BC'
},
# ...
# etc.
# ...
{
    'match_id': 'jqpcWkTD',
    'home_HT': '0',
    'away_HT': 0,
    'home_ST': 0
}
]

如果目標是從包含鍵值對的輸入的大型 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 中收集有價值的信息,其中已知鍵的重復“火車”中的順序是相同的,這是我解決這個問題的方法。 我專注於作為預期結果呈現的四個鍵。 我還使用最后一個鍵'BC'作為觸發器來完成提取的字典。 這種特殊情況也是硬編碼game_keys的原因。

games = [] # for collecting all results

match = {} # for collecting elements of single match (reused)
for item in input_list:
    key, value = list(item.items())[0]
    if 'AA' == key:
        match['match_id'] = value
    elif 'BA' == key:
        match['home_HT'] = value
    elif 'BB' == key:
        match['away_HT'] = value
    elif 'BC' == key:
        match['home_ST'] = value
        games.append(match)
        match = {} # reset for next match

使用關鍵字“in”檢查哈希集中或字典中是否存在值在初始場景中轉換哈希集中的列表 game_keys 更有意義,但很可能需要將其轉換為字典 map 所需的結果.

myListOfDictionaries = [{'SA': '1'}, {'AC': '3'}, {'BA': '0'}, {'AA': 'jqpcWkTD'}]
game_keys = set(['AA', 'BA', 'BB'])
match = {}
for myDictionary in myListOfDictionaries:
    for key in myDictionary:
        if(key in game_keys):
            if(key in match):
                match[key].append(myDictionary[key])
            else:
                match[key] = [myDictionary[key]]

為了完成你的任務,我假設你需要 game_keys 是一個字典,其中鍵“AA”的值為“match_id”,鍵“BA”的值為“home_HT”......

這將使創建所需結果更加靈活。

這不是您問題的最終解決方案,如果我只是給您解決方案,我不相信您會學到很多東西。 我相信通過這段代碼,您也許可以解決創建字典的問題。

在我的示例中,我有一個字典“匹配”,我查找該鍵是否存在,如果不存在,我在其中添加單個項目的列表......如果它存在,我知道有一個列表至少一個項目,所以我 append 更多項目給它。

您可以使用相同的邏輯來創建字典字典。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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