在python中更改结构中的数据

时间:2011-02-24 17:06:33

标签: python string data-structures iterator

我在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?

2 个答案:

答案 0 :(得分:1)

您可以通过字典界面访问它。

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

两条评论:

  • 首先,这不会更改data中的值,因为您要在DefaultData中返回该副本。
  • 其次,作为额外的安全性,您可能希望在哈希中包含name字段。至少就这两种用户拥有相同密码并不明显。

答案 1 :(得分: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'}}