2015-06-25 4 views
-2

Я совершенно новый для python и работал над чем-то, что требует прохождения через какой-то сложный словарь, который выглядит примерно так.понимание сложного словаря

var_data: 
{ 
    'pvc' : { 
     'files' : ['logs1.txt', 'logs2.txt'] 
     'version' : 'v192.2' 
    }, 
    'mci' : { 
     'files' : ['ld33r3.txt', 'rkkk3k3.txt'] 
     'version' : 'v39.2' 
    }, 
    'dac' : { 
     'files' : ['33.txt', 'logfile3.txt'] 
     'version' : 'v32.2' 
    } 
} 

Я бью головой, чтобы понять, как эта ссылка. В основном мой код должен быть в состоянии иметь, если условие, которое будет смотреть на эти данные и сделать конкретные conditinal заявления для «файлы» в зависимости от значения выше этого .. например «»: DAC {

Действительно оценить какие-либо указания в этом ...

веселит Кабир

+0

Не могли бы вы подробнее рассказать о специальных инструкциях для «файлов» в зависимости от значения над ним. Например, «dac»: {'part? Вы хотите иметь разные 'if-elif-else', если внешние ключи (например, 'dac'), разные? –

+2

Сначала попробуйте учебник? – poke

+0

Условие ясное ... То, с чем я борюсь, заключается в том, как извлечь эти значения из этого словаря. Например, если я могу видеть «pvc»: {part, то я должен иметь возможность получить соответствующие «файлы»: ['logs1.txt', 'logs2.txt'] – NKB

ответ

1

Я бить голову вокруг, чтобы понять, как эта ссылка.

У вас есть словарь, который содержит 3 словаря, каждый из которых содержит список строк и одну строку.

мой код должен быть в состоянии иметь, если условие, которое будет смотреть на эти данные и сделать конкретные conditinal заявления для «файлы» в зависимости от значения выше этого .. например, «» DAC

вы можете цикл над ним:

for k, v in var_data.iteritems(): 
    if k == 'pvc': 
    # do stuff. Your files list is in v['files'] 
    elif k == 'mci': 
    # do other stuff 
    elif k == 'dac': 
    # do other stuff 
+0

@KabeerNoorudeen Я буквально сказал, как вы можете это сделать в комментариях в блоке кода –

+0

@KabeerNoorudeen, поскольку это прямо сейчас, var_data не является допустимым словарем Python, который вы тестировали? –

+0

@JoeR Я не думаю, что это неважно. Он сказал, что dict * выглядит примерно так * –

0

не уверен, что, если вы не обновите свой вопрос с тем, что я написал в своем комментарии, я думаю, что это то, что вы хотите? : -

def process_files(files): 
""" 
Do some processing on a list of files, 
specified by their names 
""" 

    for file_name in files: 
     with open(file_name, 'r+') as file: # Will work if script in same dir as the files. Else, make the absolute path to file using file_name, and put that instead of just file_name 
      file_content = file.read() 
      # Do whatever else. 
      # Perhaps, read the documentation examples 
      # first, get a feeling, then come back 


for key in var_data: # For each key in your dict, (iteration happening here) 
    if key == 'pvc': 
     # do something on var_data[key] 
     files = var_data[key]['files'] # Get your list ['file1.txt', ..] 
     process_files(files) # process this list of files in some func. 
    elif key == 'mci': 
     # do something else 
    elif key == 'dac': 
     # and so on. 

Кроме того, ваш словарь не очень хорошо построен. Недопустимые запятые в конце значений клавиш files. И var_data: ошибочно.

0

Похоже, вы спрашиваете, как вытащить пары ключ-значение из словаря. iteritems(), вероятно, является наиболее синтаксически компактным способом. Вот пример:

var_data = { 
    'pvc': { 
     'files': ['logs1.txt', 'logs2.txt'], 
     'version': 'v192.2' 
    }, 
    'mci': { 
     'files': ['ld33r3.txt', 'rkkk3k3.txt'], 
     'version': 'v39.2' 
    }, 
    'dac': { 
     'files': ['33.txt', 'logfile3.txt'], 
     'version': 'v32.2' 
    } 
} 

for filetype, data in var_data.iteritems(): 
    for filename in data['files']: 
     print 'Processing {} as type {}'.format(filename, filetype) 
0

Во-первых, в словаре есть недопустимый синтаксис, так что нет ничего, что вы можете сделать с этим, как есть, потому что это не является допустимым словарь Python.

Например Я просто возьму кулачную часть, но это та же проблема во всем словаре.

Это то, что у вас есть:

var_data : {'pvc' : {'files' : ['logs1.txt', 'logs2.txt'] 'version' : 'v192.2'} 

При запуске этого вы получите invalid syntax ошибку.Это, как вы должны исправить см}, после ['logs1.txt', 'logs2.txt'] и = после var_data вместо : вы должны исправить эту же проблему во всем словаре, см исправил строку ниже:

var_data = {'pvc' : {'files' : ['logs1.txt', 'logs2.txt']}, 'version' : 'v192.2'} 

Теперь, после того, как вы исправите это, если вы хотите print например var_data['pvc'], вы получите этот выход: {'files': ['logs1.txt', 'logs2.txt']}. Если вы хотите, чтобы увидеть все keys вашего словаря, вы можете print в keys так:

print var_data.keys() #Python 2 
print (var_data.keys()) #Python 3 

Выход будет:

['pvc', 'version', 'mci', 'dac'] 

Что касается if заявлений, я не уверен, что вы хотите сделать точно, но теперь, по крайней мере, вы можете использовать операторы if.

Если вы хотите точно объяснить, что вам нужно делать с операторами if, я соответствующим образом обновлю ответ.

Смежные вопросы