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

Mapping a dictionary key and its corresponding values from a list?

提问人:Troy 提问时间:5/20/2017 最后编辑:martineauTroy 更新时间:5/20/2017 访问量:298

问:

我设法读取了一个 .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 个元素设置为一个键,并将中间的四个元素设置为该键的相应值?

python 列表 字典

评论


答:

0赞 kuro 5/20/2017 #1

如果您希望每五个元素作为字典的键,并将接下来连续的四个元素列表作为值,那么您可以尝试字典理解。

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

至于你的代码,假设你得到并纠正了,有一些问题。在第二次尝试中,您将遍历列表中的每个元素,并将其添加为字典的键。在内部循环中,您添加为字典的值。因此,对于内部循环中的每次迭代,key 的值都会被覆盖。 你本可以做的是——every_fourmy_keysmy_keysxi

my_dict = dict()

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

对于第一次尝试,我真的需要看看你是如何得到的并指出错误。my_keysevery_four

评论

0赞 Troy 5/20/2017
救星!谢谢!
0赞 kuro 5/20/2017
@Troy,很高兴它有所帮助。如果这回答了你的问题,你能接受这个答案吗?
0赞 Troy 5/20/2017
答案是肯定的!对不起,对整个事情有点陌生。如果你不介意,你知道为什么我尝试的 for 循环没有按照我的期望工作吗?
0赞 kuro 5/20/2017
要做到这一点,我需要看看你是如何得到的every_four
0赞 kuro 5/20/2017
@Troy,我已经更新了我的答案。请参阅说明