[英]convert a list of dictionaries to a single dictionary which has same key names
我有一個具有相同鍵的字典列表。 當我嘗試轉換時,我只得到一本字典作為輸出。
下面是我試過的代碼
d = [{'tk': {'inputCol': 'text', 'outputCol': 'texttk'},
'sw': {'inputCol': 'texttk', 'outputCol': 'textsw'},
'hf': {'inputCol': 'textsw','outputCol': 'texthtf','numFeatures': 1024},
'IDF': {'inputCol': 'texthtf', 'outputCol': 'textidf'}},
{'tk': {'inputCol': 'domains', 'outputCol': 'domainstk'},
'sw': {'inputCol': 'domainstk', 'outputCol': 'domainssw'},
'hf': {'inputCol': 'domainssw','outputCol': 'domainshtf','numFeatures': 1024},
'IDF': {'inputCol': 'domainshtf', 'outputCol': 'domainsidf'}},
{'va': {'inputCol': ['textidf', 'domainsidf'],'outputCol': 'assembler_features'},
'ms': {'inputCol': 'assembler_features','outputCol': 'scaled_features'}}]
out = {k:v for x in d for k,v in x.items()}
print(out)
{'tk': {'inputCol': 'domains', 'outputCol': 'domainstk'},
'sw': {'inputCol': 'domainstk', 'outputCol': 'domainssw'},
'hf': {'inputCol': 'domainssw',
'outputCol': 'domainshtf',
'numFeatures': 1024},
'IDF': {'inputCol': 'domainshtf', 'outputCol': 'domainsidf'},
'va': {'inputCol': ['textidf', 'domainsidf'],
'outputCol': 'assembler_features'},
'ms': {'inputCol': 'assembler_features', 'outputCol': 'scaled_features'}}
我需要以下格式的輸出
{'tk': {'inputCol': 'text', 'outputCol': 'texttk'},
'sw': {'inputCol': 'texttk', 'outputCol': 'textsw'},
'hf': {'inputCol': 'textsw','outputCol': 'texthtf','numFeatures': 1024},
'IDF': {'inputCol': 'texthtf', 'outputCol': 'textidf'},
'tk': {'inputCol': 'domains', 'outputCol': 'domainstk'},
'sw': {'inputCol': 'domainstk', 'outputCol': 'domainssw'},
'hf': {'inputCol': 'domainssw','outputCol': 'domainshtf','numFeatures': 1024},
'IDF': {'inputCol': 'domainshtf', 'outputCol': 'domainsidf'},
'va': {'inputCol': ['textidf', 'domainsidf'],'outputCol': 'assembler_features'},
'ms': {'inputCol': 'assembler_features','outputCol': 'scaled_features'}}
在同一個字典中必須有相同的鍵是不可能的。 您可以采取的一種方法是將重復鍵的值放在一個列表中,該列表將是該鍵的值。
例如,改為使用這個(我重復一遍,這是不可能的):
{
'tk': {'inputCol': 'text', 'outputCol': 'texttk'},
'tk': {'inputCol': 'domains', 'outputCol': 'domainstk'}
}
你可以有這樣的東西:
{
'tk': [
{'inputCol': 'text', 'outputCol': 'texttk'},
{'inputCol': 'domains', 'outputCol': 'domainstk'}
]
}
out = {}
for x in d:
for k, v in x.items():
out_val = out.get(k, [])
out_val.append(v)
out[k] = out_val
注意:這將以字典結尾,其中所有值都是列表(長度 > 1 的值表示重復鍵)。
如果您想要一個干凈的輸出,其中只有重復的鍵具有列表值,您可以將其附加到代碼中:
out = {k:v[0] if len(v) == 1 else v for k, v in out.items()}
輸出:
{'IDF': [{'inputCol': 'texthtf', 'outputCol': 'textidf'},
{'inputCol': 'domainshtf', 'outputCol': 'domainsidf'}],
'hf': [{'inputCol': 'textsw', 'numFeatures': 1024, 'outputCol': 'texthtf'},
{'inputCol': 'domainssw',
'numFeatures': 1024,
'outputCol': 'domainshtf'}],
'ms': {'inputCol': 'assembler_features', 'outputCol': 'scaled_features'},
'sw': [{'inputCol': 'texttk', 'outputCol': 'textsw'},
{'inputCol': 'domainstk', 'outputCol': 'domainssw'}],
'tk': [{'inputCol': 'text', 'outputCol': 'texttk'},
{'inputCol': 'domains', 'outputCol': 'domainstk'}],
'va': {'inputCol': ['textidf', 'domainsidf'],
'outputCol': 'assembler_features'}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.