将包含2个图片的列表缩减为一个项目唯一的列表,将python3中的其他项目串联起来

2024-04-28 08:28:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试转换一些数据:

[
 {'delim_type': '', 'arcana_list': 'Life 3'}, 
 {'delim_type': ' and/or ', 'arcana_list': 'Mind 3'}, 
 {'delim_type': ' and/or ', 'arcana_list': 'Prime 3'},
]

看起来像这样:

[
 {'delim_type': '', 'arcana_list': 'Life 3'}, 
 {'delim_type': ' and/or ', 'arcana_list': ['Mind 3', 'Prime 3']}, 
]

基本上,当delim类型相同时,将一个arcana_list项附加到另一个项。你知道吗

我试着查找ziping和chain iter之类的东西,但是我找不到一个短的pythonic方法来做这件事而不拆开包装然后重新包装。我觉得用列表理解应该能做到,但我的python fu很弱。你知道吗


Tags: orand数据类型chaintypepythonicprime
2条回答

我相信有一个更巧妙的方法可以做到这一点,但这是我想到的

def combineDicts(old):
    from itertools import groupby
    new = []
    for k,g in groupby(l, lambda i: i['delim_type']):
        d = {'delim_type':k}
        d['arcana_list'] = ', '.join(i['arcana_list'] for i in g)
        new.append(d)
    return new

测试

>>> old = [
            {'delim_type': '', 'arcana_list': 'Life 3'}, 
            {'delim_type': ' and/or ', 'arcana_list': 'Mind 3'}, 
            {'delim_type': ' and/or ', 'arcana_list': 'Prime 3'},
          ]

>>> combineDicts(old)
[{'arcana_list': 'Life 3', 'delim_type': ''},
 {'arcana_list': 'Mind 3, Prime 3', 'delim_type': ' and/or '}]
[
 {'delim_type': '', 'arcana_list': 'Life 3'}, 
 {'delim_type': ' and/or ', 'arcana_list': 'Mind 3, Prime 3'}, 
]

如果你不坚持上述格式,我会怎么做:

将采用以下格式(允许更轻松地查找):

{' and/or ': ["mind 3", "prime 3"], 
' ': 'Prime 3'} 

这很容易做到:

from collections import defaultdict
d = defaultdict(list) 
for node in my_list: 
    d[node['delim_type']].append(node['arcana_list'])

如果字符串比列表更可取,那么当然可以执行defaultdict(str)+= ', '(尽管我不确定什么时候会这样)。你知道吗

示例:

my_list = [
 {'delim_type': '', 'arcana_list': 'Life 3'}, 
 {'delim_type': ' and/or ', 'arcana_list': 'Mind 3'}, 
 {'delim_type': ' and/or ', 'arcana_list': 'Prime 3'},
]

输出:

defaultdict(<class 'list'>, {'': ['Life 3'], ' and/or ': ['Mind 3', 'Prime 3']})

用法:

In [19]: d['']
Out[19]: ['Life 3']

In [20]: d[' and/or ']
Out[20]: ['Mind 3', 'Prime 3']

相关问题 更多 >