python - 在 Python 中将短划线分隔的字符串数据转换为嵌套字典/列表

标签 python list dictionary linked-list nested

我有一个字符串列表,其中列表中的每个元素都采用指定的格式a-b-c,其中每个a、b、c都是整数,例如包含大约8000个长度为n-m-k变化的元素。

myList = ['1-1-1', '1-1-2', '1-2-1', '1-2-2', '1-3-1', ...., n-m-k]

我正在尝试找到一种简单有效的方法将其转换为

myDict = {
'1': {
    '1-1': ['1-1-1','1-1-2','1-1-3','1-1-4'],
    '1-2': ['1-2-1','1-2-2'],
    '1-3': ['1-3-1']
},
....,
'n': {.....,'n-m':[....,'n-m-k']}
}

因为我需要基于这些元素运行操作,例如就地链接列表。

实现这一目标的最简单方法是什么?

提前致谢,

最佳答案

如果可以接受整数元组,您可以使用:

x = ['1-1-1','1-1-2', '1-2-1', '1-2-2', '1-3-1']
y3 = [tuple(map(int,a.split('-'))) for a in x]
y2 = set(a[:2] for a in y3)
y1 = set(a[0] for a in y2)

d = {}
for k1 in y1:
    d1 = {}
    d[k1] = d1
    for k2 in (z for z in y2 if z[0]==k1):
        a2 = []
        d1[k2] = a2
        for a in (z for z in y3 if z[0]==k1 and z[1]==k2[1]):
            a2.append(a)

但是如果您确实需要字符串,您可以简单地通过以下方式连接键:

x = ['1-1-1','1-1-2', '1-2-1', '1-2-2', '1-3-1']
y3 = [tuple(a.split('-')) for a in x]
y2 = set(a[:2] for a in y3)
y1 = set(a[0] for a in y2)


d = {}
for k1 in y1:
    d1 = {}
    d[k1] = d1
    for k2 in (z for z in y2 if z[0]==k1):
        a2 = []
        d1['-'.join(k2)] = a2
        for a in (z for z in y3 if z[0]==k1 and z[1]==k2[1]):
            a2.append('-'.join(a))

d
# returns:
{'1': {'1-1': ['1-1-1', '1-1-2'], '1-2': ['1-2-1', '1-2-2'], '1-3': ['1-3-1']}}

关于python - 在 Python 中将短划线分隔的字符串数据转换为嵌套字典/列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54015933/

相关文章:

python - 使用 pandas 和 sqldf 并收到一个不起眼的错误

python - 图像未显示在 Tkinter 标签小部件中

python - 如何删除每行中的重复列表( Pandas )?

python - 在Python中查找列表和字典之间的共同元素

python - 在 Python 中的特定字符串中重组 dict 的最佳方法

r - 以双射方式将向量映射为整数

python - TensorFlow 图中的条件评估

python - 如何在没有重复的情况下找到两个数组中最接近的元素 [duplicates] 并在 Python 中返回两个数组的索引?

C# List<int> 从 SQL 存储过程结果填充

java - 如何删除列表中的特定元素