我有字母数字列表,
my_list = ["A1B2244", "B3H7654", "A1O6541", "J4777"]
我需要像
那样将每个单词分开{"A1": ["B2244", "O6541"], "B3": ["H7654"], "J4": ["777"]}
您能否让我知道在Python中最简单的方法。
您可以使用itertools.groupby
根据条件(前两个字符(对列表的元素进行分组。然后将结果提供给dict
构造函数
>>> from itertools import groupby
>>> dict([(k,list(g)) for k,g in groupby(sorted(k),key=lambda x: x[:2])])
>>> {'J4': ['J4777'], 'A1': ['A1B2244', 'A1O6541'], 'B3': ['B3H7654']}
list = ['A1B2244', 'B3H7654', 'A1O6541', 'J4777']
#first initialize lists based 2 first elements
d= {i[:2]:[] for i in list}
#loop to add items by key
[d.get(i[:2]).append(i[2:]) for i in list]
print(d)
输出:
{'A1': ['B2244', 'O6541'], 'J4': ['777'], 'B3': ['H7654']}
my_list = ['A1B2244', 'B3H7654', 'A1O6541', 'J4777']
my_dict={i[:2]:i[2:] for i in my_list}
编辑:抱歉,我没有注意到您的输出中的复制。其他人有简短的解决方案,但纯粹的Pythonic方法是:
my_list = ['A1B2244', 'B3H7654', 'A1O6541', 'J4777']
my_dict={}
for i in my_list:
if i[:2] in my_dict:
my_dict[i[:2]].append(i[2:])
else:
my_dict[i[:2]]=[i[2:]]
只是为了添加威利安·维埃拉(Willian Vieira(的第一个答案,我认为立即知道d= {i[:2]:[] for i in list}
之后的输出print(d)
是有帮助的,即:
{'A1': [], 'B3': [], 'J4': []}
只是在两行解决方案中澄清这一行。只是为了查看键是如何从列表的每个元素中的前两个字符(不重复这些字符(中制成的,并且值将其初始化为空列表。
根据您对问题的评论,拆分规则是:第一个数字之后分开。因此,您可以搜索第一个数字的索引,拆分并添加到dict中。我忽略了没有数字的输入。
def first_index_of_digit(st):
for i in range(len(st)):
if st[i].isdigit():
return i
return -1
my_list = ["A1B2244", "B3H7654", "A1O6541", "J4777"]
dd = dict()
for item in my_list:
i = first_index_of_digit(item)
if (i == -1):
continue
k, v = item[:i+1], item[i+1:]
if (dd.get(k, 0) == 0):
dd[k] = list()
dd[k].append(v)
print(dd)
# {'A1': ['B2244', 'O6541'], 'B3': ['H7654'], 'J4': ['777']}