2017-06-22 42 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']]

相關問題