将字典列表转换为具有相同键名的单个字典
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'}}
我有一个具有相同键的字典列表。当我尝试转换时,我只得到一本字典作为输出。
下面是我试过的代码
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'}}