【问题标题】:create a dict using numbers as keys and values from ints stored in a list in python?使用数字作为键和值从存储在python列表中的整数创建一个字典?
【发布时间】:2015-01-23 00:25:27
【问题描述】:

我在 Project Euler 上做 Problem 8,接下来我要做的是创建一个 dict,其中键为 1 - 1000,值是数字中的每个 int。

我尝试了各种方法,包括尝试使用 1-1001 的范围来创建键和嵌套 for 循环迭代数字,然后尝试 intDict[k] = j 其中 k 是范围循环中的数字,j 是来自数字循环,但似乎无法正确处理。 如何实现? 谢谢。

到目前为止我的代码:

def lrgProdOf5Numbers():
intDict = {}
highest = 0
f= open("1000dig.txt","r")
d = f.read()
f.close()
digits = [int(e) for e in str(d) ] #convert each number in string  to int

【问题讨论】:

    标签: python python-2.7 dictionary


    【解决方案1】:

    *编辑

    我明白了。您的文本文件是从问题中复制的一组数字。这应该有效。正如其他人提到的,我认为您可能只是错过了清除换行符。

    with open('1000dig.txt', 'r') as f:
        num_string = ''.join((line.strip() for line in f.readlines()))
    
    d = {i: digit for i, digit in enumerate(num_string)}
    

    你是这个意思吗?

    【讨论】:

    • 接近我想要的,键是正确的,但我希望值来自包含 1000 个整数的数字。所以基本上我想要从 1 到 1000 的键,其中键 1 的值是数字 [0],键 2 的值是数字 [1] 等等......
    • 就是这样,但它没有丢失明确的换行符,我使用了 read() 并且 txt 文件是所有 1000 个数字的一​​长行,因此没有换行符。您的解决方案适用于我的原始代码,如“d = {i: digit for i, digit in enumerate(d)}”。再次感谢,我完全忘记了枚举。
    【解决方案2】:

    究竟是什么问题?你有什么错误吗?

    如果您在列表理解中发现错误,您可能需要从“d”中删除换行符。

    更新(基于 kobejohn 的回答和您的回答):

    d = {i: digits[int(i)] for i in range(15)}
    

    【讨论】:

    • 我的列表理解很好,我将文本文件变成了一长串数字以避免拆分或弄乱字符串。
    • 如果您在创建理解时没有任何问题,那么您应该能够循环(通过理解或标准 for 循环)并根据您的数字数组中的索引和值创建字典。我假设在您的问题中,您的“==”实际上应该是“=”。
    • 当我在键中达到两位数时,值变成两位数,即 12:[3,7],当键是三个值时变成 3 位数。我想要的是每个键值对的映射,以对应于我的列表“数字”中每个 int 的位置。即数字中的前三个整数是 7,3,1 所以 1:[7],2:[3],3[1] 等..
    • 查看更新,这应该可以。此外,对于您所描述的内容,列表似乎就足够了。
    • NP,不要忘记将提供的任何一个答案标记为解决方案(我认为 kobejohn 更恰当地回答了您的问题)。
    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 2015-06-30
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    相关资源
    最近更新 更多