2014-02-16 2 views
0

я написал эту функцию, возвращающую dictionary, я думаю, либо itertools или только с помощью yeild я могу вернуться dictionary, но я никогда не делал, что в случае dictionaryвозвращения Словаре генератора наиболее эффективный способ

def configDb(): 
    """ Reads git global config file 

     Returns: 
      config(dict): git config settings 
    """ 
    # Read git config file 
    configFile, _ = execGitCommand('git config --list') 
    config = {} 
    for line in (each for each in configFile.split("\n") if each): 
     config[line.split("=")[0]] = line.split("=")[-1] 

    return config 

Как я могу заставить эту функцию действовать так, как мне не нужно звонить, как configDb(), но вместо этого просто configDb[key] должен дать мне значение?

+1

В чем смысл «генератора словарей»? Словарь не полезен, пока не будут загружены все предметы; просто верните dict. –

ответ

0

Словари не могут быть generator-е изд, но вы можете yieldключ-значение кортежи

def configDb(): 
    """ Reads git global config file 

     Returns: 
      config(dict): git config settings 
    """ 
    # Read git config file 
    configFile, _ = execGitCommand('git config --list') 
    config = {} 
    for line in (each for each in configFile.split("\n") if each): 
     yield line.split("=")[0], line.split("=")[-1] 
+0

Думаю, мне пришлось бы придерживаться моей текущей реализации. –

+1

Да, я бы не стал винить вас :) – mhlester

0

Неполный файл конфигурации вряд ли полезно, так не кажется, нет особого смысла в " сгенерированный словарь ".

def configDb(): 
    """ Reads git global config file 

     Returns: 
      config(dict): git config settings 
    """ 
    # Read git config file 
    configFile, _ = execGitCommand('git config --list') 
    rows = (line.split("=") for line in configFile.splitlines()) 
    return dict(row for row in rows if len(row)==2) 
Смежные вопросы