我想打印其值为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中的值?
答案 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
。