如何检查字符串是否与存储在字典列表中的值匹配

时间:2017-06-22 11:39:15

标签: python list dictionary

我有一个字典,其中每个键都有多个列表作为其值。我想在所有列表中解析某个索引以查看它们包含的值,即我想要列表的第二个索引。我试图检查是否存储了某个数字(存储为字符串)。如果有数字,我将预定义变量的位从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 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

我将添加另一个答案,因为现在我确定我理解你想要的东西,如果你想要每个密钥的二进制文件,你可以按照你的代码执行此操作(它可以做得更简单和prety,但我不&# 39;我想在这里抛弃你的工作):

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']]