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)
参考:
当我尝试使用 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)
参考: