从列表中映射字典键及其对应的值?

时间:2017-05-20 14:17:16

标签: python list dictionary

我设法读取.txt文件,并将每行读作列表的不同元素;满容易。接下来,我从每个元素中删除了所有非数字字符(只留下0-9和'。'),也很容易完成。

然而,我留下了一个包含90个元素的列表。从元素0开始,我希望每个第5个元素成为我的字典的键(0,5,10,15等)。然后我希望中间的4值对应于前一个键的值(作为列表长度4)。

例如: my_list [0]是具有相应值my_list [1:5]的键 my_list [5]是具有相应值的键my_list [6:10] 等等

我设法将每个第5个元素拿出来并将其作为自己的列表;只是拿着钥匙。而且我甚至设法创建了另一个列表,它将值之间的所有值保存为长度为4的单独列表。

我试过了:

my_dict = dict()

for i in my_keys:
    my_dict[i] = [x for x in every_four]

my_dict = dict()

for i in my_keys:
    for x in every_four:
        my_dict[i] = x

第一个给了我正确的键,但每个值只是整个every_four列表,而不仅仅是每个元素。第二个给了我正确的键,但每个值只是every_four列表的第一个元素,它不会迭代。

有人可以帮助我以这种方式工作吗?有没有更简单的方法可以从原始数组中做到这一点?只需将每个第5个元素设置为一个键,将其间的四个元素设置为该键的相应值?

1 个答案:

答案 0 :(得分:0)

如果你想要每个第五个元素作为你的字典的键,并将下一个连续的四个元素列表作为值,那么你可以尝试字典理解。

my_dict = {my_list[i] : my_list[i+1 : i+5] for i in range(0, len(my_list), 5)}

样本输入 -

my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

输出将是 -

{0: [1, 2, 3, 4], 5: [6, 7, 8, 9]}

但是如果对于没有下一个元素的键,这段代码将生成一个空列表作为值。

输入 -

my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

输出 -

{0: [1, 2, 3, 4], 10: [], 5: [6, 7, 8, 9]}

至于您的代码,假设您every_fourmy_keys正确,则存在一些问题。在第二次尝试中,您循环遍历my_keys列表中的每个元素,并将其添加为字典的键。在内部循环中,您将添加x作为字典的值。因此,对于内部循环中的每次迭代,键i的值都会被覆盖。 你可以做的是 -

my_dict = dict()

for i in my_keys:
    for x in every_four:
        my_dict.setdefault(i, []).append(x)

首次尝试时,我真的需要了解如何让my_keysevery_four指出错误。

相关问题