第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

共享共同價值時如何合并字典?

共享共同價值時如何合并字典?

慕后森 2023-06-20 10:35:08
我目前從我的數(shù)據(jù)庫中刪除了以下數(shù)據(jù)(4 個字典列表):raw_data = [{'budget_id': 1, 'name': 'Maria', 'amount': 980, 'user': '10', 'gift': 'Phone', 'cost': 325}, {'budget_id': 1, 'name': 'Maria', 'amount': 980, 'user': '10', 'gift': 'Flower', 'cost': 195}, {'budget_id': 2, 'name': 'Scott', 'amount': 2100, 'user': '10', 'gift': 'Paris Trip', 'cost': 599}, {'budget_id': 2, 'name': 'Scott', 'amount': 2100, 'user': '10', 'gift': 'Ring', 'cost': 1200}]我想自動合并共享相同“budget_id”的每個字典,以便最后得到以下內(nèi)容(2 個字典列表):final_data = [{'name': ['Maria'], 'cost': [195, 325], 'gift': ['Phone', 'Flower'], 'budget_id': [1], 'user': ['10'], 'amount': [980]}, {{'name': ['Scott'], 'cost': [599, 1200], 'gift': ['Paris Trip', 'Ring'], 'budget_id': [2], 'user': ['10'], 'amount': [2100]}這個想法是它不應(yīng)該被硬編碼,因為從網(wǎng)站傳入的詞典數(shù)量會逐漸移動并減少加班時間。到目前為止,我已經(jīng)找到了一個硬編碼的解決方案,可以讓我成功地合并第一本和第二本字典:Merge_Init = {}for key in (fibud.keys() | sebud.keys()):    if key in final_data[0]: Merge_Init.setdefault(key, []).append(final_data[0][key])    if key in final_data[1]: Merge_Init.setdefault(key, []).append(final_data[1][key])print(Merge_Init)final_merge = {a:list(set(b)) for a, b in Merge_Init.items()}print("New Dict without Duplicates:", final_merge)導(dǎo)致 :New Dict without Duplicates: {'user': ['10'], 'gift': ['Phone', 'Flower'], 'name': ['Maria'], 'amount': [980], 'budget_id': [1], 'cost': [195, 325]}注意這一次,贈品的花費(fèi)稍微倒過來了,應(yīng)該是[325, 195]。您能否協(xié)助找到一個解決方案來循環(huán)遍歷每個預(yù)算并在它們共享相同的 budget_id 時合并它們,而無需任何硬編碼解決方案(如“final_data[0]”)同時保持?jǐn)?shù)據(jù)完整性?
查看完整描述

3 回答

?
婷婷同學(xué)_

TA貢獻(xiàn)1844條經(jīng)驗 獲得超8個贊

您可以像這樣使用熊貓:


import pandas as pd


df = pd.DataFrame([{'budget_id': 1, 'name': 'Maria', 'amount': 980, 'user': '10', 'gift': 'Phone', 'cost': 325}, {'budget_id': 1, 'name': 'Maria', 'amount': 980, 'user': '10', 'gift': 'Flower', 'cost': 195}, {'budget_id': 2, 'name': 'Scott', 'amount': 2100, 'user': '10', 'gift': 'Paris Trip', 'cost': 599}, {'budget_id': 2, 'name': 'Scott', 'amount': 2100, 'user': '10', 'gift': 'Ring', 'cost': 1200}])

df = df.groupby('budget_id').agg({'name': set,

                                   'amount': set,

                                   'cost': set ,

                                   'user': set,

                                   'gift': set}).reset_index()

print(df.to_dict('records'))


查看完整回答
反對 回復(fù) 2023-06-20
?
MM們

TA貢獻(xiàn)1886條經(jīng)驗 獲得超2個贊

該解決方案不會對數(shù)組的任何元素進(jìn)行硬編碼,但是由于您對不同的鍵有不同的要求,因此需要對這些鍵進(jìn)行硬編碼才能正確處理它們。在合并后的示例中,您只有 ['Maria'],而如果您有兩個成本相同的項目,您肯定會期望成本為 [150, 150],而不是 [150]。


final = {} # key is budget_id, and value is the all dictionaries merged 

for dict in list:

   budget_id = dict['budget_id']

   if budget_id in final:

        # for each key you'll do something like this

        dictToModify = final[budget_id]

        dictToModify.append(dict['gift'])

        # for each key in dictionary, add it to the list

        # some will be added always to the list: e.g. cost

        # some will be added only once, e.g. name and budget_id


   else:

       # here you're just putting everything in a list as in your final_data example

       final[ budget_id ] = {key:[value] for (key,value) in dict.items()}


final_data = list(final.values())

如果元素不存在,則此循環(huán)將元素添加到最終字典,或者如果已存在具有相同 budget_id 的元素,則合并。循環(huán)的最后一步是將其轉(zhuǎn)換為字典列表。


查看完整回答
反對 回復(fù) 2023-06-20
?
斯蒂芬大帝

TA貢獻(xiàn)1827條經(jīng)驗 獲得超8個贊

這是一個解決方案,raw_data為了更好地演示而進(jìn)行了擴(kuò)展:


raw_data = [{'budget_id': 1, 'name': 'Maria', 'amount': 980, 'user': '10', 'gift': 'Phone', 'cost': 325}, {'budget_id': 1, 'name': 'Maria', 'amount': 980, 'user': '10', 'gift': 'Flower', 'cost': 195}, {'budget_id': 2, 'name': 'Scott', 'amount': 2100, 'user': '10', 'gift': 'Paris Trip', 'cost': 599}, {'budget_id': 2, 'name': 'Scott', 'amount': 2100, 'user': '10', 'gift': 'Ring', 'cost': 1200}, {'budget_id': 2, 'name': 'Scott', 'amount': 2100, 'user': '10', 'gift': 'Watch', 'cost': 240}]


final_data = []


for entry in raw_data:


    found = False

    for ind, final in enumerate(final_data):

        # Look if the budget entry already exists

        if entry['budget_id'] in final['budget_id']:

            found = True

            break


    if found:

        # Merge

        # Everything - issue if any entry just happens 

        # to be the same (like cost)

        #for key, value in entry.items():

            #if not (entry[key] in final[key]):

            #   final_data[ind][key].append(entry[key])


        # Alternative - specific entries only

        final_data[ind]['gift'].append(entry['gift'])

        final_data[ind]['cost'].append(entry['cost'])

    else:

        # If not yet there - add it as a new item, converting 

        # all values to lists

        final_data.append({x:[y] for x,y in entry.items()})


print(final_data)

代碼循環(huán)遍歷raw_data循環(huán)中的所有字典。對于每個字典,它然后循環(huán)遍歷所有現(xiàn)有條目以final_data跟蹤索引enumerate。使用budget_id它檢查是否已經(jīng)遇到并存儲了預(yù)算條目。如果是這種情況,它會設(shè)置一個適當(dāng)?shù)臉?biāo)志并中斷循環(huán)。


在第二部分,如果尚未遇到該條目,則將其final_data作為字典附加到列表中,并將其所有值轉(zhuǎn)換為列表。


如果它已經(jīng)存在 - 數(shù)據(jù)被合并。這里有兩個選項,一個,注釋掉的一個,如果值不相同/不存在,它將所有內(nèi)容合并在一起。這對于很容易重復(fù)的商品價格之類的東西不利,但為了完整起見,我保留了它。


在第二個當(dāng)前版本中,它只是查找特定的項目鍵并與它們合并。這假定即使 中有重復(fù)項gifts,也應(yīng)該包括它們。


查看完整回答
反對 回復(fù) 2023-06-20
  • 3 回答
  • 0 關(guān)注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號