Design-Help Python变量DataStructure List / Dict / Tuple

时间:2015-09-17 08:29:26

标签: python python-2.7

在尝试使用list和dict的不同方法,搜索周围等没有成功之后,我可能需要一些帮助来设计Python中的一些数据结构......对于经验丰富的python编码器来说可能很容易但我无法找到正确的语法,然而。

在伪代码中,我想要一个像这样的数据结构:

[Name_str] (Week_Str, anyValue) (Week_str, anyValue) (Week_str, anyValue) ...

在循环中我希望能够将更多和更多的Week_Strings和Values作为元组或其他类型的“连接”数据添加到给定的名称,这样我最终知道名称xxx那里是下面的一对周字符串和值可用,我可以逐对(以任何方式)显示它们。

对于名字,我认为能够像在字典中那样以哈希方式访问它是非常好的,但这不是必需的。

基本上我想将数据一对一地插入到一个名称的循环中,然后我需要能够遍历显示所有所有属性字符串/值对的所有现有名称(无论如何),例如:

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)

在评论中解释我需要动态构建该结构的方法:

表示List_Names中的名称:

...以某种方式将可用的对Week_Str / Value添加到新的数据结构

4 个答案:

答案 0 :(得分:2)

data = {}
data['Peter']=[('1/15', 7), ('2/15', 3)]
data['Max'] = [('1/15', 2), ('2/15', 4)]

这还不错吗?

编辑:要追加,请使用:

data['Peter'].append(('3/15', 6))

答案 1 :(得分:0)

这看起来应该在主词典中使用一组词典:

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}
       }

当然,您可以通过data['Peter']data['Peter']['2/15']个人及其个别周的个人提供帮助。

答案 2 :(得分:0)

您可以从循环创建和访问变量,如下所示:

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

答案 3 :(得分:0)

  

在尝试使用list和dict的不同方法,在没有成功的情况下搜索等等之后,我可能需要一些帮助来设计Python中的小数据结构...

如果我想想你想做什么,我想说,你想为一个人增加一周的价值。当您想要搜索特定周的值时,使用元组可以工作,但不太实用。

我会推荐另一种方法,只是使用字典或对象。

WRITE_MY_LINE(System.out.format(" I = %3d  var = %9.6f", i, myVar).toString());
//also tried this :
WRITE_MY_LINE(String.valueOf(System.out.format(" I = %3d  var = %9.6f", i, myVar)));

public static void WRITE_MY_LINE(String line) {
        buff_out = new BufferedWriter(new FileWriter(ascii_path, true));

        buff_out.append(line);
        buff_out.newLine();
        buff_out.flush();
}

输入是动态的,稍微多一点" python方式"。您可以轻松访问所有值:

data={}
data['Peter'] = {}
data['Max'] = {}
data['Peter']['1/15'] = 12
data['Peter']['2/15'] = 13
...

您的代码更具可读性和更短。