理解复杂的字典

时间:2015-06-25 06:59:08

标签: python python-2.7

我是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'
     }
}

我正在努力了解这个参考是怎样的。 基本上我的代码应该能够有一个if条件来查看这些数据,并根据它上面的值为“文件”做特定的条件语句。 例如 'dac':{

真的很感激这方面的任何指导......

欢呼声 卡比尔

4 个答案:

答案 0 :(得分:1)

  

我正在努力了解这个参考资料。

你有一个字典,其中包含3个字典,每个字典包含一个字符串列表和一个字符串。

  

我的代码应该能够有一个if条件来查看这些数据,并为"文件"做特定的条件语句。取决于它上面的价值......例如' 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

答案 1 :(得分: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:是错误的。

答案 2 :(得分: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)

答案 3 :(得分:0)

首先,字典有一些无效的语法,所以你不能用它来做,因为这不是一个有效的Python字典。

例如我将采取第一部分,但整个字典中存在同样的问题。

这就是你所拥有的:

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

如果您运行此操作,则会出现invalid syntax错误。这就是你应该在},后{em> ['logs1.txt', 'logs2.txt']以及=var_data而不是:修复 {<1>}的方法。整个字典中的同样问题,请看下面的更正行:

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语句需要做什么,我会相应地更新我的答案。