python - 我怎样才能只解析/拆分每个元素中有多个冒号的列表?创建字典

标签 python dictionary split

我有以下 Python 列表:

list1 = ['EW:G:B<<LADHFSSFAFFF', 'CB:E:OWTOWTW', 'PP:E:A,A<F<AF', 'GR:A:OUO-1-XXX-EGD:forthyFive:1:HMJeCXX:7', 'SX:F:-111', 'DS:f:115.5', 'MW:AA:0', 'MA:A:0XT:i:0', 'EY:EE:KJERWEWERKJWE']

我想获取这个列表的条目并创建一个看起来像这样的键值对字典

dictionary_list1 = {'EW':'G:B<<LADHFSSFAFFF', 'CB':'E:OWTOWTW', 'PP':'E:A,A<F<AF', 'GR':'A:OUO-1-XXX-EGD:forthyFive:1:HMJeCXX:7', 'SX':'F:-111', 'DS':'f:115.5', 'MW':'AA:0', 'MA':'A:0XT:i:0', 'EW':'EE:KJERWEWERKJWE'}

如何解析/拆分 list1 上面的列表来做到这一点?我的第一直觉是尝试 try1 = list1.split(":"),但后来我认为不可能检索此列表的“键”,因为有多个冒号 :

最符合 Python 风格的方法是什么?

最佳答案

您可以使用 split 的第二个参数指定最大拆分次数.

list1 = ['EW:G:B<<LADHFSSFAFFF', 'CB:E:OWTOWTW', 'PP:E:A,A<F<AF', 'GR:A:OUO-1-XXX-EGD:forthyFive:1:HMJeCXX:7', 'SX:F:-111', 'DS:f:115.5', 'MW:AA:0', 'MA:A:0XT:i:0', 'EW:EE:KJERWEWERKJWE']
d = dict(item.split(':', 1) for item in list1)

结果:

>>> import pprint
>>> pprint.pprint(d)
{'CB': 'E:OWTOWTW',
 'DS': 'f:115.5',
 'EW': 'EE:KJERWEWERKJWE',
 'GR': 'A:OUO-1-XXX-EGD:forthyFive:1:HMJeCXX:7',
 'MA': 'A:0XT:i:0',
 'MW': 'AA:0',
 'PP': 'E:A,A<F<AF',
 'SX': 'F:-111'}

如果您想跟踪非唯一键的值,例如 'EW:G:B<<LADHFSSFAFFF''EW:EE:KJERWEWERKJWE' ,您可以将键添加到 collections.defaultdict :

import collections
d = collections.defaultdict(list)
for item in list1:
    k,v = item.split(':', 1)
    d[k].append(v)

结果:

>>> pprint.pprint(d)
{'CB': ['E:OWTOWTW'],
 'DS': ['f:115.5'],
 'EW': ['G:B<<LADHFSSFAFFF', 'EE:KJERWEWERKJWE'],
 'GR': ['A:OUO-1-XXX-EGD:forthyFive:1:HMJeCXX:7'],
 'MA': ['A:0XT:i:0'],
 'MW': ['AA:0'],
 'PP': ['E:A,A<F<AF'],
 'SX': ['F:-111']}

关于python - 我怎样才能只解析/拆分每个元素中有多个冒号的列表?创建字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39909214/

相关文章:

python - 迭代嵌套字典列表

Python 自然平滑样条

python - 如何制作随机电子邮件生成器?

python - 在Python中向Google输入工具发送请求

python:在某个值之前将字符串列表拆分为多个列表

Javascript - 如何反转字符串并消失那些逗号?

java - 如何将日期转换为int数组?

python - 从字典列表中提取字符串

javascript - 将 .ai 或 .svg 文件放到网络上,不使用 Flash

list - Ansible - 如果用户已经在其他组中,则从组 x 中删除用户