提问人:Troy 提问时间:5/20/2017 最后编辑:martineauTroy 更新时间:5/20/2017 访问量:298
从列表中映射字典键及其对应的值?
Mapping a dictionary key and its corresponding values from a list?
问:
我设法读取了一个 .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 个元素设置为一个键,并将中间的四个元素设置为该键的相应值?
答:
如果您希望每五个元素作为字典的键,并将接下来连续的四个元素列表作为值,那么您可以尝试字典理解。
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_four
my_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_keys
every_four
评论
every_four
评论