【问题标题】:changing data in a struct in python在python中更改结构中的数据
【发布时间】:2011-07-03 17:42:43
【问题描述】:

我是python的新手,但有一个问题我不知道如何解决。

例如,我有这个结构,其中包含管理员、berit 等成员:

DEFAULT_DATA = {
'administrator': {
    'name': 'Admin',
    'pw': 'secret',
    'is_author': False,
    'is_admin': True
}
'berit': {
     'name': 'berit',
    'pw': 'apa',
    'is_author': False,
    'is_admin': False
 }

然后可以通过以下方法访问此数据:

def DefaultData():
"""Provides default data for Gruyere."""
 return copy.deepcopy(DEFAULT_DATA)

我想对密码进行 md5 哈希处理,这样它们就不是明文了,但我不知道如何访问诸如“pw”之类的字段并在 python 中重新分配一个新值。

以下是关于它可能是什么的猜测:

stored_data = data.DefaultData()
for member in stored_data:
   for field in member:
       if field=='pw':
           'pw' = md5.new(salt+pw).hexdigest()    // how do you access the value?

【问题讨论】:

  • 也许阅读 Python 教程。您所说的结构是字典,它们存在以允许通过键(例如字符串)简单有效地访问值...
  • 如果只有一种方法可以使用自定义行为来实现自定义类型,我们就不必摆弄默认类型...

标签: python string data-structures iterator


【解决方案1】:

stored_data 中的值本身就是字典。迭代这些值并应用您的算法:

stored_data = data.DefaultData()
for data in stored_data.values():
    data['pw'] = md5(salt + data['pw']).hexdigest()

from pprint import pprint
pprint(stored_data)

输出

{'administrator': {'is_admin': True,
                   'is_author': False,
                   'name': 'Admin',
                   'pw': '33e7cb694fb6fb2f848af6774d9ff138'},
 'berit': {'is_admin': False,
           'is_author': False,
           'name': 'berit',
           'pw': '00c10978330d65eb0cb739a629b6ed15'}}

【讨论】:

    【解决方案2】:

    您通过字典界面访问它。

    stored_data = data.DefaultData()
    for member in stored_data.itervalues():
        member['pw'] =  md5.new(salt + member['pw']).hexdigest()
    

    两个cmets:

    • 首先,这不会更改data 中的值,因为您在DefaultData 中返回了它的副本。
    • 其次,作为额外的安全措施,您可能希望在哈希中包含name 字段。至少这样的话,两个用户是否有相同的密码就不会很明显了。

    【讨论】:

    • 在分配成员 ['pw'] 时抱怨“字符串索引必须是整数”。为什么不将其视为字典?
    • for member in stored_data 迭代作为字符串的键。迭代这些值。
    猜你喜欢
    • 2019-10-03
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    相关资源
    最近更新 更多