我有一个字符串列表,其中列表中的每个元素都采用指定的格式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/