Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设计帮助Python变量数据结构列表/Dict/Tuple_Python_Python 2.7 - Fatal编程技术网

设计帮助Python变量数据结构列表/Dict/Tuple

设计帮助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_字符串和值作为元组或其他类型的“连接”数据添加到给定的名称中,以便

在尝试了使用list和dict的不同方法后,四处搜索等都没有成功,我可能需要一些帮助来设计Python中的一些数据结构。。。对于有经验的python程序员来说可能非常容易,但我还不能找到正确的语法

在伪代码中,我需要这样的数据结构:

[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)