如何遍历列表并将一些变量分配为键,将一些变量分配为值?
How to loop through list and assign some variables as a key and some as a value?
你好,
我很难弄清楚如何遍历列表并将一些分配为键,一些分配为值。我已经在 Stack Overflow 中搜索了一段时间,但找不到类似这样的问题,所以我发帖了。
情况如下:
my_list = ['start_here', 'a1', 'b2', 'a3', 'start_here_2', 'b1', 'a2', 'start_here_3', 'a1', 'b2', 'a3', 'b4']
(它可以继续到 start_here_4、start_here_5 等任意数量的 a# 或 b#)
这是我想要的输出:
my_dict = {'start_here': ['a1', 'b2', 'a3'], 'start_here_2': ['b1', 'a2'], 'start_here_3': ['a1', 'b2', 'a3', 'b4']
我不知道我是否应该将我的原始列表拆分为 3 或 4 或更多,然后将索引 0 设为键,然后是一个变量列表作为值,或者是否有绕过的方法然后立即从原始列表创建字典。
提前谢谢你,我有点新!
像这样,例如:
my_list = ['start_here', 'a1', 'b2', 'a3', 'start_here_2', 'b1', 'a2', 'start_here_3', 'a1', 'b2', 'a3', 'b4']
key = None
my_dict = {}
for v in my_list:
if v.find('start_here') == 0:
key = v
my_dict[key] = []
else:
my_dict[key].append(v)
print(my_dict)
输出:
{'start_here': ['a1', 'b2', 'a3'], 'start_here_2': ['b1', 'a2'], 'start_here_3': ['a1', 'b2', 'a3', 'b4']}
find
方法识别每个以 start_here
开头的列表元素,将该元素保存为新键,并使用该键和空列表向 my_dict
添加一个条目作为该值,然后将后续列表元素附加到该键的列表值,直到遇到下一个键(即以 start_here
开头的下一个列表元素)。
更新:下面显示了使用 find()
的替代方案(可能更好)。
(1) 假设列表中以 start_here
开头的任何字符串都被视为键(在评论中归功于@Jasmijn):
key = None
my_dict = {}
for v in my_list:
if v.startswith('start_here'):
key = v
my_dict[key] = []
else:
my_dict[key].append(v)
(2) 假设列表中包含 start_here
作为子串的任何字符串都被视为键:
key = None
my_dict = {}
for v in my_list:
if 'start_here' in v:
key = v
my_dict[key] = []
else:
my_dict[key].append(v)
你好,
我很难弄清楚如何遍历列表并将一些分配为键,一些分配为值。我已经在 Stack Overflow 中搜索了一段时间,但找不到类似这样的问题,所以我发帖了。
情况如下:
my_list = ['start_here', 'a1', 'b2', 'a3', 'start_here_2', 'b1', 'a2', 'start_here_3', 'a1', 'b2', 'a3', 'b4']
(它可以继续到 start_here_4、start_here_5 等任意数量的 a# 或 b#)
这是我想要的输出:
my_dict = {'start_here': ['a1', 'b2', 'a3'], 'start_here_2': ['b1', 'a2'], 'start_here_3': ['a1', 'b2', 'a3', 'b4']
我不知道我是否应该将我的原始列表拆分为 3 或 4 或更多,然后将索引 0 设为键,然后是一个变量列表作为值,或者是否有绕过的方法然后立即从原始列表创建字典。
提前谢谢你,我有点新!
像这样,例如:
my_list = ['start_here', 'a1', 'b2', 'a3', 'start_here_2', 'b1', 'a2', 'start_here_3', 'a1', 'b2', 'a3', 'b4']
key = None
my_dict = {}
for v in my_list:
if v.find('start_here') == 0:
key = v
my_dict[key] = []
else:
my_dict[key].append(v)
print(my_dict)
输出:
{'start_here': ['a1', 'b2', 'a3'], 'start_here_2': ['b1', 'a2'], 'start_here_3': ['a1', 'b2', 'a3', 'b4']}
find
方法识别每个以 start_here
开头的列表元素,将该元素保存为新键,并使用该键和空列表向 my_dict
添加一个条目作为该值,然后将后续列表元素附加到该键的列表值,直到遇到下一个键(即以 start_here
开头的下一个列表元素)。
更新:下面显示了使用 find()
的替代方案(可能更好)。
(1) 假设列表中以 start_here
开头的任何字符串都被视为键(在评论中归功于@Jasmijn):
key = None
my_dict = {}
for v in my_list:
if v.startswith('start_here'):
key = v
my_dict[key] = []
else:
my_dict[key].append(v)
(2) 假设列表中包含 start_here
作为子串的任何字符串都被视为键:
key = None
my_dict = {}
for v in my_list:
if 'start_here' in v:
key = v
my_dict[key] = []
else:
my_dict[key].append(v)