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