从列表中划分字母数字字并存储为字典的键值对

时间:2018-04-26 01:28:09

标签: python dictionary alphanumeric

我有一个字母数字数据列表,

my_list = ["A1B2244", "B3H7654", "A1O6541", "J4777"]

我需要用dict形式划分每个单词,如

{"A1": ["B2244", "O6541"], "B3": ["H7654"], "J4": ["777"]}

请您告诉我在python中执行此操作的最简单方法。

5 个答案:

答案 0 :(得分:0)

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:]]

答案 1 :(得分:0)

您可以使用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']}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

只是为了添加Willian Vieira的第一个答案,我认为在print(d)之后知道输出d= {i[:2]:[] for i in list}会很有帮助,这是:

{'A1': [], 'B3': [], 'J4': []}

只是为了澄清双线解决方案中的这一行。只是为了看看如何通过获取列表的每个元素中的前两个字符来创建密钥(不重复这些字符),并将值初始化为空列表。

答案 4 :(得分:0)

根据您对该问题的评论,要拆分的规则是:在第一个数字后拆分。因此,您可以搜索第一个数字的索引,拆分并添加到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']}