converting dictionary values to list in Python
假设我有一个字典(dict),其中的键和值如下:
print(dict)
1 | {'AAA': {'', '111', '222'}, 'BBB': {'222', '999', '555'}} |
我想从字典中提取单个字符串形式的值,即
1 | values = '111', '222', '999', 555' |
但我得到的是在
dict.keys()
1 | dict_keys(['AAA', 'BBB']) |
dict.values()
1 | dict_values([{'', '111', '222'}, {'222', '999', '555'}]) |
我如何才能达到要求的结果?
您可以使用
1 2 3 4 5 6 | In [92]: from itertools import chain In [93]: dct = {'AAA': {'', '111', '222'}, 'BBB': {'222', '999', '555'}} In [94]: {x for x in chain(*dct.values()) if x} Out[94]: {'111', '222', '555', '999'} |
如果要将此输出转换为单个字符串,只需对其使用
您可以尝试在一行中列出理解:
1 2 3 | data={'AAA': {'', '111', '222'}, 'BBB': {'222', '999', '555'}} print(set([k for i,j in data.items() for k in j if k])) |
输出:
1 | {'222', '999', '111', '555'} |
这是另一种不导入任何模块的方法。
1 2 3 4 5 | dict = {'AAA': {'', '111', '222'}, 'BBB': {'222', '999', '555'}} result = [] print([[result.append(item) or item for item in one_set if item] for one_set in dict.values()]) print(','.join(result)) #all non '' elements print(','.join(set(result))) #all non '' and non duplicated elements |
输出:
1 2 3 4 | [['222', '111'], ['222', '999', '555']] 222,111,222,999,555 222,999,555,111 [Finished in 0.181s] |
只需使用
1 2 3 | values = [] for key in some_dict: values.extend(list(some_dict[key])) |
如果需要删除空字符串,请使用:
1 | values = list(filter(None, values)) |
查看此SE条目
然后,如果愿意,可以将其转换为元组:)
你想要类似的东西吗
1 2 3 | d = dict() d[0] = '0' str(d) |
?
之后,字符串操作相当简单
我相信如果您希望它们输出为单个字符串,那么这就是您所追求的:
1 2 3 4 5 6 7 8 9 10 11 | mydict = {'AAA': {'', '111', '222'}, 'BBB': {'222', '999', '555'}} out = [] for keys, values in mydict.items(): [out.append(i) for i in values if i!=''] out = ','.join(set(out)) print(out) print(type(out)) |
输出:
1 2 3 | 555,222,111,999 <class 'str'> |