Dict 在 Python 中如何工作?它是 class 中的静态成员吗​​?

How the Dict work in Python? Is it a static member in class?

当我尝试使用 Python 将 .csv 文件中的数据转换为 dict 时,我遇到了这些问题。我 运行 在 Python3.4 和 Win7 中。这是我的 main.py:

import csv

class user(object):
    user_id = ""  # User's ID
    number_to_item_info = {} # Mapping from int to list (contains a dict)
    def __init__(self, user_id, number, category):
        self.user_id = user_id
        if number in self.number_to_item_info:
            self.number_to_item_info[number].append([category])
        else:
            self.number_to_item_info.setdefault(number, [[category], ])

users_group = []

with open('test.csv', newline='\n') as csvfile:
    reader = csv.reader(csvfile, delimiter=',', quoting=csv.QUOTE_NONE)
    for row in reader:
        # print(row)
        User = user(row[0], row[1], row[2])
        if 'number' in User.number_to_item:
            users_group.append(User)
    User.number_to_item.clear() # Actually I really want to know this sentence

for user in users_group:
    print(user.user_id, user.number_to_item_info)

在我的test.csv中,数据是(例如):

['user_id', 'number', 'category']
['122333', '1', '1231234']
['333221', '1', '2211222']
['112233', '2', '2223444']

当我在 Powershell 中 运行 时(抱歉),我得到这些结果:

user_id {'number': [['category']]}
122333 {'1': [['1231234']]}
333221 {'1': [['2211222']]}
112233 {'2': [['2223444']]}

但是,在我删除"User.number_to_item.clear()"之后,我会在dict中得到更多我不想要的信息。

问题是:如果我删除那句话,我会在每个成员的字典中得到额外重复的键和值;如果我不删除那句话,我将在users_group的字典中得到任何东西,除了user_id,它对每个成员都是正确的。 我猜 dict 是 Static Class memeber in Python,对吗?或者也许我错了?我该如何解决这个问题?

P.S: 修改后数据和部分代码不完整。如有问题请指出。谢谢。

class user(object):
    number_to_item_info = {} # Mapping from int to list (contains a dict)

以上代码将 number_to_item_info 创建为 class 属性。听起来您希望它成为一个实例属性。在那种情况下,将 number_to_item_info 的创建移动到 __init__() 方法中:

class user(object):
    def __init__(self, user_id, number, category):
        self.number_to_item_info = {} # Mapping from int to list (contains a dict)

参考: