设计帮助Python变量数据结构列表/Dict/Tuple
在尝试了使用list和dict的不同方法后,四处搜索等都没有成功,我可能需要一些帮助来设计Python中的一些数据结构。。。对于有经验的python程序员来说可能非常容易,但我还不能找到正确的语法 在伪代码中,我需要这样的数据结构:设计帮助Python变量数据结构列表/Dict/Tuple,python,python-2.7,Python,Python 2.7,在尝试了使用list和dict的不同方法后,四处搜索等都没有成功,我可能需要一些帮助来设计Python中的一些数据结构。。。对于有经验的python程序员来说可能非常容易,但我还不能找到正确的语法 在伪代码中,我需要这样的数据结构: [Name_str] (Week_Str, anyValue) (Week_str, anyValue) (Week_str, anyValue) ... 在循环中,我希望能够将越来越多的Week_字符串和值作为元组或其他类型的“连接”数据添加到给定的名称中,以便
[Name_str] (Week_Str, anyValue) (Week_str, anyValue) (Week_str, anyValue) ...
在循环中,我希望能够将越来越多的Week_字符串和值作为元组或其他类型的“连接”数据添加到给定的名称中,以便最终我知道名称xxx
有以下可用的Week字符串和值对,并且我可以成对(以任何方式)显示它们
对于名称,我认为能够像在字典中一样以散列方式访问它会非常好,但这不是必需的
基本上,我希望将循环中的数据一对一对地插入到一个名称中,然后我需要能够循环所有现有名称,显示所有属于的字符串/值对(无论如何),例如:
在评论中解释了我需要动态构建该结构的方法:
对于列表中的名称\u名称:
。。。以某种方式将可用的pair Week\u Str/Value添加到新的数据结构中
data = {}
data['Peter']=[('1/15', 7), ('2/15', 3)]
data['Max'] = [('1/15', 2), ('2/15', 4)]
这够好吗
编辑:要追加,请使用:
data['Peter'].append(('3/15', 6))
看起来您应该在主词典中使用一组词典:
Peter : ('1/15', 7) ('2/15', 3) ('4/15', 4) ('5/15', 2) ('7/15', 2)
Max : ('1/15', 2) ('2/15', 4) ('3/15', 4) ('5/15', 3) ('6/15', 5)
这很好地反映了这一点:
data = {
"Peter": {'1/15': 7, '2/15': 3, '4/15': 4, '5/15': 2, '7/15': 2},
"Max": {'1/15': 2, '2/15': 4, '3/15': 4, '5/15': 3, '6/15': 5}
}
当然,您可以使用
数据['Peter']
获取个人,并使用数据['Peter']['2/15']
获取个人周数。您可以通过如下循环创建和访问变量:
names = ["Peter", "Max"]
#list of tuples
peter_values = [('1/15', 7), ('2/15', 3), ('4/15', 4), ('5/15', 2), ('7/15', 2)]
max_values = [('1/15', 2), ('2/15', 4), ('3/15', 4), ('5/15', 3), ('6/15', 5)]
values = [peter_values, max_values]
# dictionary, note that dictionaries aren't always iterated in the same order
people = {}
# fill dictionary with data
for i in range(0, len(names)):
people[names[i]] = values[i]
print people
for person in people:
print person
for t1, t2 in people[person]:
print "tuple value 1: %s, tuple value 2: %s" % (t1, t2)
这是输出:
{'Max': [('1/15', 2), ('2/15', 4), ('3/15', 4), ('5/15', 3), ('6/15', 5)], 'Peter': [('1/15', 7), ('2/15', 3), ('4/15', 4), ('5/15', 2), ('7/15', 2)]}
Max
tuple value 1: 1/15, tuple value 2: 2
tuple value 1: 2/15, tuple value 2: 4
tuple value 1: 3/15, tuple value 2: 4
tuple value 1: 5/15, tuple value 2: 3
tuple value 1: 6/15, tuple value 2: 5
Peter
tuple value 1: 1/15, tuple value 2: 7
tuple value 1: 2/15, tuple value 2: 3
tuple value 1: 4/15, tuple value 2: 4
tuple value 1: 5/15, tuple value 2: 2
tuple value 1: 7/15, tuple value 2: 2
编辑:
这是另一种方法,它对您更有效吗
people = {"Peter" : [], "Max" : []}
new_values = [('Peter', 'value1', 2), ('Peter', 'value2', 3), ('Max', 'value3', 4), ('Max', 'value3', 4)]
for name, v1, v2 in new_values:
people[name].append((v1, v2))
print people
在尝试了使用list和dict的不同方法后,四处搜索等都没有成功,我可能需要一些帮助来设计Python中的一些数据结构
如果我想一想你想做什么,我会说,你想为一个人增加一周的价值。当您想要搜索特定周的值时,元组的使用是有效的,但并不实用
我推荐另一种方法,只使用字典或对象
data={}
data['Peter'] = {}
data['Max'] = {}
data['Peter']['1/15'] = 12
data['Peter']['2/15'] = 13
...
输入是动态的,更像“python方式”。您可以非常轻松地访问所有值:
#Check if there is a value
if '1/15' in data['Peter']:
print 'Peter had any value of %s in week 1/15' % (data['Peter']['1/15'])
#Loop over the values
for person in data:
for week, any_value in data[person].iteritems():
print 'Person: %s ; Week: %s; Any Value: %s' % (person, week, value)
您的代码更具可读性和更短 对我来说,你应该使用一个包含元组列表作为值的字典。您可以通过遍历列表来访问元组。我应该补充一点,我正在搜索语法,以便在循环中动态构建该数据结构-这样最终它可以像我的示例中的Peter和Max一样。对于列表中的名称:。。。以某种方式将可用的pair Week\u Str/Value添加到新的数据结构中很好,它可以工作,但我需要知道如何动态添加值:所以数据[name]=[(Week\u Str,Value)]到目前为止还不错。但是,我如何添加下一对而不只是覆盖旧的一对呢?您总是可以在列表中附加一个元组,该值将如何被覆盖?数据[same_name]=[(week_str1,value1)]数据[same_name]=[(week_str2,value2)]…因此它会被覆盖。。。(至少对我来说是这样)难道没有某种“附加”之类的东西吗?不幸的是,“peter_值”和“max_值”必须在循环中成对读取,并且还没有像您的示例那样的结构。所以我一次只知道一对peter或max值,而不是一次全部。就像我在文本中添加的一样,我必须从这样的循环开始:对于列表中的名称:。。。然后以某种方式将可用的pair Week\u Str/Value添加到新的数据结构中……您可以预先创建带有姓名的字典,然后只需使用
人员[key]将其附加到列表中即可。每当您有新数据要附加时,附加((value1,value2))
。是的,我想这就是我需要的,谢谢!我还需要一些测试,但到目前为止看起来还不错……:)谢谢,看起来很好!我也会考虑这个想法……:)
#Check if there is a value
if '1/15' in data['Peter']:
print 'Peter had any value of %s in week 1/15' % (data['Peter']['1/15'])
#Loop over the values
for person in data:
for week, any_value in data[person].iteritems():
print 'Person: %s ; Week: %s; Any Value: %s' % (person, week, value)