如何允许字典值枚举的行为类似于Python中的字典键枚举?

blahzayblahzay

我试图从文件中提取数据,将其放入列表中,将该列表放入字典中,然后将该字典追加到具有相应键名的更大字典中。到目前为止,一切正常,除了值worddict仅提供最新版本,而密钥根据其名称更改。如何将当前值附加worddictbigDictionary,而不是文件的最后一行(的最后一个值worddict

import csv

bigDictionary = {}
worddict={}

with open('puzzle.csv') as csvfile:
    csvreader = csv.reader(csvfile, delimiter='\n')
    for row in csvreader:
        wordrow = ''.join(row)
        wordlist=wordrow.split('\t')
        worddict['y']=wordlist[0]
        worddict['x']=wordlist[1]
        worddict['box']=wordlist[2]
        worddict['direction']=wordlist[3]
        worddict['word']=wordlist[4]
        worddict['clue']=wordlist[5]
        print(worddict)
        #bigDictionary.update({wordlist[4]:worddict})
        bigDictionary[wordlist[4]] = worddict

print(bigDictionary)
意志

在Python中,当将一个变量分配给第二个变量时,仅创建对第二个变量引用这意味着当第二个变量更改时,第一个也将更改。

x = [1, 2, 3]
# y is only a reference to x 
y = x
# When x changes, y will as well
x[2] = 5
print(y)

# y points to the same object as x
[1, 2, 5]

来源:对象和引用

当您将bigDictionaryto的键分配给时worddict,您将创建一个引用,worddict引用意味着当worddict更改时,会将相应的值bidDictionary更改为new worddict

就您的代码而言,问题在于您仅worddict在循环开始之前定义了一次。要解决该问题,您需要为每一行创建一个 worddict值,然后将其分配给中的键bidDictionary

import csv

bigDictionary = {}


with open('puzzle.csv') as csvfile:
    csvreader = csv.reader(csvfile, delimiter='\n')
    for row in csvreader:
        # Define new dictionary
        worddict={}
        wordrow = ''.join(row)
        wordlist=wordrow.split('\t')
        worddict['y']=wordlist[0]
        worddict['x']=wordlist[1]
        worddict['box']=wordlist[2]
        worddict['direction']=wordlist[3]
        worddict['word']=wordlist[4]
        worddict['clue']=wordlist[5]
        bigDictionary[wordlist[4]] = worddict

另一种选择是使用copy模块并在worddict每次循环中创建一个副本文档)。

作为建议,Pandas库非常适合使用csv文件。花时间学习非常值得!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python字典枚举循环到键/值

如何枚举两个键中的字典值并使用 Python 输出 txt 文件中的值?

字典枚举键性能

枚举作为字典键

枚举字典迭代键和值

如何用Java创建类似于Python中的字典?

如何在Java中创建类似于以下python字典的字典并一次输入多个值?

如何在java中创建一个类似于python字典的字典并一次输入多个值?

在Swift中枚举字典

同时枚举2个python字典的值?

如何在 Swift 中枚举速记字典(或转换字典的所有键类型)?

使用枚举作为字典键

枚举对象作为字典键

在 Kotlin 中,是否可以为不同的对象设置不同的枚举值,类似于 Python 处理枚举值的方式?

返回字典时,python的行为类似于JavaScript吗?

python类的行为类似于字典或列表数据

如何在python中检查字典是否为空并且字典是否类似于{"":""}

如何快速从字典中解开枚举

在Python中通过字典进行枚举

如何从Python的字典中的值获取键?

使用枚举键将值添加到Swift字典

将字典枚举键作为命名值呈现

如何在Python枚举中定义自定义属性(类似于Javascript)

如何在 Swift 中将枚举对象作为字典键传递?

如何使用枚举(在结构内部定义)作为字典的键?

在C#中以枚举为键创建静态只读字典

在字典中引用嵌套枚举?

如何使用枚举键将用户输入添加到字典中?

如何使用Go创建类似于字典的Python?