2017-06-22 44 views
1

我有一本字典,其中每个键具有多个列表作为其值。我想解析所有列表中的某个索引以查看它们包含的值,即我想要列表的第二个索引。我试图检查某个数字(存储为字符串)是否存储在那里。如果数字在那里,我将预定义变量的位从0更改为1.我希望将此二进制数字作为值存储到另一个字典中的原始键。如何检查字符串是否与存储在字典列表中的值匹配

for key, value in dfDict.items(): 
    for sublist in value: 
    channelBinary = list('0000') 
    if '0' in sublist[2]: 
     channelBinary[3] = '1' 
    if '1' in sublist[2]: 
     channelBinary[2] = '1' 
    if '2' in sublist[2]: 
     channelBinary[1] = '1' 
    if '3' in sublist[2]: 
     channelBinary[0] = '1' 

我知道,因为它要检查基本与我的字典键关联的每个列表,并为每个列表中的二进制数,这是错误的。我只想要一个二进制数,告诉我每个字典关键字的每个列表的第二个索引中存储的所有值。我也尝试过这样的事情

for key, value in dfDict.items(): 
    channelBinary = list('0000') 
    if '0' in value[][2]: 
     channelBinary[3] = '1' 
    if '1' in value[][2]: 
     channelBinary[2] = '1' 
    if '2' in value[][2]: 
     channelBinary[1] = '1' 
    if '3' in value[][2]: 
     channelBinary[0] = '1' 

我知道这个代码是错误的,但希望你看到我离开了一个指数的值的第一方括号,这意味着我主要想忽略列表索引和唯一的牵挂关于子列表索引。

编辑:样本字典结构。这是印刷字典

{'key1': [('data1', 'dataA', '1', 'data_a'), 
      ('data2', 'dataB', '2', 'data_b'), 
      ('data3', 'dataC', '0', 'data_c')], 
'key2': [('data4', 'dataD', '3', 'data_d'), 
      ('data5', 'dataE', '2', 'data_e'), 
      ('data6', 'dataF', '1', 'data_f'),]} 
+2

你能发布样品字典结构? – Arun

+0

您可以添加字典的样本吗? –

+0

对于一个给定的键,有两个(或更多)子列表会有相同的元素#2值吗? –

回答

2

只需使用你的第一个例子,但移动channelBinary = list('0000')内环以外的只是输出:

for key, value in dfDict.items(): 
    channelBinary = list('0000') 
    for sublist in value: 
     for i in range(len(channelBinary)): 
      if str(i) in sublist[2]: 
       channelBinary[len(channelBinary) - 1 - i] = '1' 
+0

我认为这可能是正确的解决方案,请你帮我理解如果二进制字符串的值不会被覆盖? –

+0

当然他们会被覆盖。 –

+0

-0仍然是0,所以这为i == 0失败;用'3-i'替换'-i'应该可以。 –

0

我会添加其他的答案,因为现在知道我知道你想要什么如果你想为每个键的二进制,你可以做到这一点,下面的代码(它可以做很多simplier和prety,但我不希望在这里扔掉你的工作):

dfDict = {'key1': [('data1', 'dataA', '1', 'data_a'), 
      ('data2', 'dataB', '2', 'data_b'), 
      ('data3', 'dataC', '0', 'data_c'),], 
     'key2': [('data4', 'dataD', '3', 'data_d'), 
       ('data5', 'dataE', '2', 'data_e'), 
       ('data6', 'dataF', '1', 'data_f'),]} 
channelBinary = [] 
index = 0 
for key, value in dfDict.items(): 
    channelBinary.append(list('0000')) 
    for sublist in value: 
     if '0' in sublist[2]: 
      channelBinary[index][3] = '1' 
     if '1' in sublist[2]: 
      channelBinary[index][2] = '1' 
     if '2' in sublist[2]: 
      channelBinary[index][1] = '1' 
     if '3' in sublist[2]: 
      channelBinary[index][0] = '1' 
    index += 1 


print(channelBinary) 

[[ '0', '1', '1', '1'],[ '1', '1', '1', '0']]

相关问题