python-3.x 合并字典中以相同值开头的值

m4pnthwp  于 2023-03-31  发布在  Python
关注(0)|答案(2)|浏览(104)

我有一本字典,看起来像这样:
a = {1: [['-','A'],['+','B'],['-','C']]}
我想把它改造成如下:
a = {1: [['-','AC'],['+','B']}
或者如果我能把它转换成pandas Dataframe 格式就更好了:
Col1 Col2 Col3
1 - AC
1 + B
我已经尝试了下面的方法,这似乎是一个过于复杂的解决方案,也不能完全做到我想要的。

tmp = collections.defaultdict(list)
for key,value in a.items():
   for v in list(value):
      tmp[v[0]].append([v[1]])

这给了我一本新字典
defaultdict(<class 'list'>, {'-':['A','C'], '+':['B']}
编辑:我现在有我想要的,但如果有人有更短更聪明的方法来做,我很乐意向你学习。

for key, value in a.items():
   tmp = collections.defaultdict(list)
   for v in value:
       tmp[v[0]].append(v[1])
    val = [[ i, ''.join(j)] for i,j in tmp.items()]
    a[key] = val

我还确保我总是有+和-值,即使是空的,并使用

pd.DataFrame.from_dict(a, orient='index')
chhkpiq4

chhkpiq41#

一个更pythonic的方法是这样的

set函数有效地传达了您只需要对中唯一的第一个元素。

a = {1: [['-','A'],['+','B'],['-','C']]}
out = {}
for key, pairs in a.items():
   unique_firsts = set([pair[0] for pair in pairs])
   out[key]={
       unique_first: [pair[1] for pair in pairs if pair[0]==unique_first] for unique_first in unique_firsts
   }
print(out)

如果你事先知道你总是想要“-”和“+”

你可以更pythonic:

a = {1: [["-", "A"], ["+", "B"], ["-", "C"]]}
firsts = ["-", "+"]
out = {
    key: [
        [first, 
            [pair[1] for pair in pairs if pair[0] == first]
        ] for first in firsts
    ]
    for key, pairs in a.items()
}
print(out)
mi7gmzs6

mi7gmzs62#

我现在已经得到了我想要的,但是如果有人有更短更聪明的方法来做到这一点,我很乐意向你学习。

for key, value in a.items():
   tmp = collections.defaultdict(list)
   for v in value:
       tmp[v[0]].append(v[1])
    val = [[ i, ''.join(j)] for i,j in tmp.items()]
    a[key] = val

我还确保我总是有+和-值,即使是空的,并使用

pd.DataFrame.from_dict(a, orient='index')

相关问题