[英]How do I merge array of list of dicts into a single dict
我有如下输入数据
[{'s1': 'INT', 's2': 'INT'}, {'s1': 'TINYINT', 's2': 'TINYINT'}, {'s1': 'SMALLINT', 's2': 'SMALLINT'}, {'s1': 'BIGINT', 's2': 'BIGINT'}, {'s1': 'BIT', 's2': 'VARCHAR(10)'}, {'s1': 'FLOAT', 's2': 'FLOAT'}]
并希望输出如下。
{'INT':'INT', 'TINYINT': 'TINYINT', 'SMALLINT': 'SMALLINT', 'BIGINT': 'BIGINT', 'BIT': 'VARCHAR(10)', 'FLOAT': 'FLOAT'}
我经历了下面的SO问题,但是没有运气。
有任何建议请。
您可以使用简单的字典理解:
a = [{'s1': 'INT', 's2': 'INT'},
{'s1': 'TINYINT', 's2': 'TINYINT'},
{'s1': 'SMALLINT', 's2': 'SMALLINT'},
{'s1': 'BIGINT', 's2': 'BIGINT'},
{'s1': 'BIT', 's2': 'VARCHAR(10)'},
{'s1': 'FLOAT', 's2': 'FLOAT'}]
d = {x['s1']: x['s2'] for x in a}
print(d)
输出:
{'BIGINT': 'BIGINT',
'BIT': 'VARCHAR(10)',
'FLOAT': 'FLOAT',
'INT': 'INT',
'SMALLINT': 'SMALLINT',
'TINYINT': 'TINYINT'}
这是一种方法。
s = [{'s1': 'INT', 's2': 'INT'}, {'s1': 'TINYINT', 's2': 'TINYINT'}, {'s1': 'SMALLINT', 's2': 'SMALLINT'}, {'s1': 'BIGINT', 's2': 'BIGINT'}, {'s1': 'BIT', 's2': 'VARCHAR(10)'}, {'s1': 'FLOAT', 's2': 'FLOAT'}]
print(dict((i["s1"], i["s2"]) for i in s))
输出:
{'SMALLINT': 'SMALLINT', 'INT': 'INT', 'FLOAT': 'FLOAT', 'TINYINT': 'TINYINT', 'BIGINT': 'BIGINT', 'BIT': 'VARCHAR(10)'}
这是一个简单的python代码 ,它提供与问题所要求的输出相同的输出。
dict_list = [{'s1': 'INT', 's2': 'INT'}, {'s1': 'TINYINT', 's2': 'TINYINT'}, {'s1': 'SMALLINT', 's2': 'SMALLINT'}, {'s1': 'BIGINT', 's2': 'BIGINT'}, {'s1': 'BIT', 's2': 'VARCHAR(10)'}, {'s1': 'FLOAT', 's2': 'FLOAT'}]
new_dict = {}
for dl in dict_list:
new_dict[dl['s1']] = dl['s2']
print(new_dict)
通过运行此代码段获得的以下输出
{'SMALLINT': 'SMALLINT', 'INT': 'INT', 'FLOAT': 'FLOAT', 'TINYINT': 'TINYINT', 'BIGINT': 'BIGINT', 'BIT': 'VARCHAR(10)'}
尽管 keyur Pordars的答案可以解决,但是要使用python 3.6的dict理解使其更通用 。
b = {list(k.values())[0]:list(k.values())[1] for k in a}
# k.values() return the **view** of the values (not a list in python 3) of
# each dict item in the list and then we wrap it into a list a and index it.
print(b) # print the output
# OUTPUT {'INT': 'INT', 'TINYINT': 'TINYINT', 'SMALLINT': 'SMALLINT', 'BIGINT': 'BIGINT', 'BIT': 'VARCHAR(10)', 'FLOAT': 'FLOAT'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.