微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有字典的变量名?

如何解决带有字典的变量名?

| Python初学者在这里。有关字典的问题。 我的输入是一个可变长度列表(例如a = [\'eggs \',\'ham \',\'bacon \'...]),它用作要在导入的CSV文件上使用的搜索词的列表。 我定义了四个函数,这些函数将每个术语与所述CSV文件中的各种值进行匹配。因此,每个输入项将产生四个结果列表。 我想将输入项作为键存储在字典中(很容易),将得到的四个列表存储为值(也很容易)。 但是,由于输入列表的长度是可变的,因此我想建立一个函数来定义和命名字典\'term1 \',\'term2 \',因此非常简单地说明了这一点:
term1 = { \'eggs\' : [[list1],[list2],[list3],[list4]] }
term2 = { \'ham\' : [[list1],[list4]] }
term3 = { \'bacon\' : [[list1],[list4]] }
是否有a)这样命名字典的方法? b)并且它们在全球范围内可用吗?如果是这样,怎么办?任何和所有帮助非常感谢。     

解决方法

我不建议您使用这种方法,但是您可以将本地和全局名称空间作为字典来访问。例如您可以使用熟悉的dict接口将任意变量添加到这些命名空间:
>>> globals()[\'foo\'] = \'bar\'
>>> foo
\'bar\'
>>> locals()[\'spam\'] = \'eggs\'
>>> spam
\'eggs\'
但是您会遇到命名冲突。另外,您的其余代码将如何知道哪些全局变量包含您的结果?他们也必须进行间接查找! 您最好只使用一个包含结果的字典,并将其作为名称空间而不是全局名称空间。     ,您可以尝试这样的事情:
results = {}
for name in [\'eggs\',\'ham\',\'bacon\']:
   results[name] = (function1(name),function2(name),function3(name),function4(name),)
其中functionX是您的函数,将从CSV文件或其他文件中返回listX结果。 在这里,您将在结果字典中找到类似以下内容的内容:
results = { 
   \'eggs\' : (egg_list1,egg_list2,egg_list3,egg_list4),\'ham\' : (ham_list1,ham_list2,ham_list3,ham_list4),\'bacon\' : (bacon_list1,bacon_list2,bacon_list3,bacon_list4),}
    ,您可以按照以下方法预先初始化一个包含所有数据的字典:
a = \"eggs bacon ham\".split()
summary = dict((key,([],[],[])) for key in a)

for lineno,line in enumerate(csv_file):
    # first element in the line is assumed to be the key (\"eggs\",\"bacon\",etc.)
    key = line[0]
    # update the data values for this key
    summary[key][0].append(lineno)
    summary[key][1].append(something_else)
    # ... etc.
我发现这种索引访问有些脆弱,并且更喜欢键控访问或属性访问。您的4个列表的硬编码列表可能更好地表示为dict甚至某些简单数据收集类的对象。 另外,我认为您的\“鸡蛋\”,\“培根\”和\“火腿\”列表会随着时间的推移而增长,因为您会在CSV文件中找到\“ pancakes \”,\“ waffles \”, \“哈希布朗\”等等。在浏览数据文件或数据库表时,最近越来越多地使用defaultdict来计算数据。无需预定义我希望获得的键(并且当输入数据中添加了新值时必须自己更新列表),defaultdict只是添加了我定义的形式的新条目:
class Tally(object):
    def __init__(self):
        self.count = 0
        self.lines = []
        self.values = []

from collections import defaultdict
summary = defaultdict(Tally)

for lineno,etc.)
    key = line[0]
    # update the data values for this key
    summary[key].count += 1
    summary[key].lines.append(lineno)
    summary[key].values.append(line[1])
    # ... etc.
defaultdict为我节省了繁琐且重复的\“ if key not in summarydict:add new entry ... \”开销,因此我的代码保持相当干净。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。