簡體   English   中英

如何將字典列表數組合並為單個字典

[英]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.

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