如何按顺序打印dic中的值?

时间:2016-05-06 05:16:18

标签: python python-2.7 dictionary

我想打印其值为0的第0个索引元素的键。

例如,3

[[1, 3], [0, 3], [1, 3], [0, 3], [1, 3]]

值为:

[[1, 3], [0, 3], [1, 3], [0, 3], [1, 3]]

值中的每个第0个索引元素为:

1 0 1 0 1

因此符合要求的要素是:

[1,3],[1,3],[1,3]

我想打印一次钥匙。所以结果应该是3。

以下是代码:

data_set = {'1': [[0, 0], [0, 0]], '2': [[0, 2]], '3': [[1, 3], [0, 3], [1, 3], [0, 3], [1, 3]], '4': [[1, 4]], '5': [[1,5], [1,5], [1,5]]}
z = ""
for k,v in data_set.items():
    for item in v:
        if item[0] == 1:
            count = 0
            if z == "" or z[count] != k:
                z += k
            count +=1
print z

我得到的结果是:

35554

预期结果应为:

345

我不知道为什么它首先打印key=3的值,然后转移到key=5的部分。

我猜这是让我的“if声明”无效的部分。因为在那部分,我检查是否已经打印了密钥。

它有什么问题以及如何按顺序打印dic中的值?

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码按顺序打印键:

print ''.join(k for k, v in sorted(data_set.iteritems()) if any(x[0] == 1 for x in v)) # 345

由于字典无序data_set.items()将以随机顺序返回键值对。这解释了为什么5在输出中的4之前。通过在迭代之前对返回的项进行排序,可以轻松解决此问题:sorted(data_set.items())

第二个问题是,因为你总是检查字符串是否为空或第一个字符是否与当前键匹配。这解释了为什么你的结果有多个5。可以通过更改if子句来检查最后一个字符来修复:

if z == "" or z[-1] != k:
    z += k

答案 1 :(得分:0)

如果您想要打印键k,即使只有值为1的{​​{1}}的单个值,您也无需计算任何内容。只是做

v

在旁注中,如果您不在Python3上,则使用z = '' for k, v in data_set.items(): for item in v: if item[0] == 1: z += k break 而不是iteritems(当您标记问题python2.7时,不是这样)。 items效率高于iteritems