将字典值转换为python中的列表

converting dictionary values to list in Python

假设我有一个字典(dict),其中的键和值如下:

print(dict)

1
{'AAA': {'', '111', '222'}, 'BBB': {'222', '999', '555'}}

我想从字典中提取单个字符串形式的值,即type(values) = str,例如:

1
values = '111', '222', '999', 555'

但我得到的是在dict.values()下:

dict.keys()

1
dict_keys(['AAA', 'BBB'])

dict.values()

1
dict_values([{'', '111', '222'}, {'222', '999', '555'}])

我如何才能达到要求的结果?


您可以使用itertools.chain执行此操作:

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'}

如果要将此输出转换为单个字符串,只需对其使用str()调用,或使用",".join(x for x in chain(*dct.values()) if x)调用。


您可以尝试在一行中列出理解:

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]

只需使用extend方法:

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'>