将字母数字单词从列表中划分,并将存储为键值对



我有字母数字列表,

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

最新更新