我有一些我想要存储的基本数据,而且我正在寻找一个更好的解决方案,而不是我想出的。 我有多个数据条目,每个条目有4个字段,name,url,currYear,availYears
我可以用一个简单的数组来解决这个问题:
data = [
['test-name', ['http://example.com', '2015', '2015,2014']]
['next-name', ['http://example.org', '1999', '1999']]
]
但是当尝试访问每个数组中的数据时,这会变得混乱。我最终得到了像这样的for循环
for each in data:
name = each[0]
url = each[1][0]
currYear = each[1][1]
我更喜欢做类似dict的事情,我可以通过一个关键名称引用我想要的东西。这不是有效的语法,但希望它能得到重点。
data = {'entry1': {'name': 'test-name'}, {'url': 'http://example.com'}, {'currYear': '2015'}, {'availYears': '2015,2014'}}
然后我可以为entryX提取网址数据。
编辑: 几个好的回应。我决定创建一个类,因为1)它满足了我的需要2)通过隔离功能帮助清理代码3)了解包,模块和类与Java相比如何工作(我更熟悉) 。 除了创建类之外,我还创建了getter和setter。
class SchoolSiteData(object):
def __init__(self, name, url, currYear, availYears):
self.name = name
self.url = url
self.currYear = currYear
self.availYears = availYears
def getName(self):
return self.name
def getURL(self):
return self.url
def getCurrYear(self):
return self.currYear
def getAvailYears(self):
return self.availYears
def setName(self, name):
self.name = name
def setURL(self, url):
self.url = url
def setCurrYear(self, currYear):
self.currYear = currYear
def setAvailYears(self, availYears):
self.availYears = availYears
答案 0 :(得分:3)
使用名称作为字典中的键:
data = {'test-name':
{'url': 'http://example.com',
'currYear': '2015',
'availYears': '2015,2014'
}
}
如此访问:
data['test-data']['url']
答案 1 :(得分:3)
一个类可以使这更容易使用:例如:
class Entry(object):
def __init__(self, name, url, currYear, availYears):
self.name = name
self.url = url
self.currYear = currYear
self.availYears = availYears
entry1 = Entry('test-name', 'http://example.com', '2015', '2015,2014')
entry2 = Entry('next-name', 'http://example.org', '1999', '1999')
data = [entry1, entry2]
for entry in data:
print entry.name
print entry.url
print entry.currYear
print entry.availYears
print
答案 2 :(得分:2)
您似乎使用list-in-list解决方案进行了不必要的复杂处理。如果你保持平衡,你可以将行解压缩成变量:
data = [
['test-name', 'http://example.com', '2015', '2015,2014'],
['next-name', 'http://example.org', '1999', '1999']
]
for name, url, currYear, availYears in data:
....
答案 3 :(得分:1)
您想要的最轻量级解决方案可能是namedtuple
。
>>> from collections import namedtuple
>>> mytuple = namedtuple("mytuple", field_names="url currYear availYears")
>>> data = [ 'test-name': mytuple('http://example.com', '2015', '2015,2014'), ...
... ]
>>> print(data['test-name'])
mytuple(url='http://example.com', currYear='2015', availYears='2015,2014')
您可以通过数字索引或名称访问成员:
>>> x = data['test-name']
>>> print(x.currYear)
2015
>>> print(x[1])
2015
答案 4 :(得分:0)
data = [
{'name': 'test-name', 'url': 'http://example.com', 'currYear': '2015', 'availYears': '2015,2014'},
{'name': 'next-name', 'url': 'http://example.org', 'currYear': '1999', 'availYears': '1999'}
]
for each in data:
name = each['name']
url = each['url']
currYear = each['currYear']