2

我试图在响应中摆脱值Name 。见下文:

response_data_all_details = decode_transaction_response(response.text)

# Remove and sensitive information we don't want to be stored in the database.
response_data = remove_sensitive(response_data_all_details)

功能:如果响应中有名称,则将其替换为“未存储”文本。

def remove_sensitive(data):
    for key in data:
        if data[key] == "Name":
            data['Name'] = "Not Stored!"
    return data

但是,这个功能似乎不起作用,为什么?

样本 response_data

{
  "URL" : "http:\/\/www.test.com",
  "Name" : "James",
  "Currency" : "GBP",
  "Amount" : 5.880000000000001,
}
4

4 回答 4

2

这里一个简单的解决方案是使用: if key in data

def remove_sensitive(data,key):
    if key in data:
         data[key] = "Not Stored!"
    return data

修复您的代码:

你必须使用if key == "Name":

def remove_sensitive(data):
    for key in data:
        if key == "Name":
            data[key] = "Not Stored!"
    return data

那是因为对字典的迭代会一一产生它的键:

>>> for key in data:
...     print key
...     
URL
Currency
Amount
Name

演示:

def remove_sensitive(data):
    for key in data:
        if key == "Name":
            data[key] = "Not Stored!"
    return data

>>> data = {                   
  "URL" : "http:\/\/www.test.com",
  "Name" : "James",
  "Currency" : "GBP",
  "Amount" : 5.880000000000001,
}
>>> remove_sensitive(data)
{'URL': 'http:\\/\\/www.test.com',
 'Currency': 'GBP',
 'Amount': 5.880000000000001,
 'Name': 'Not Stored!'}
于 2013-05-07T13:00:54.130 回答
2

你把它弄得太复杂了。这应该有效:

def remove_sensitive(data):
    data['Name'] = "Not Stored!"
    return data

或者,如果您不确定密钥'Name'是否存在:

def remove_sensitive(data):
    if data.has_key('Name'):
        data['Name'] = "Not Stored!"
    return data
于 2013-05-07T13:06:53.203 回答
1

试试这个

def remove_sensitive(data):
    for key,value in data.items():
        if key == "Name":
            data[key] = "Not Stored!"
    return data
于 2013-05-07T13:01:43.263 回答
1

我会使用 dict 方法has_key()

def remove_sensitive(data):
    if data.has_key("Name"):
        data["Name"] = "Not Stored"
    return data
于 2013-05-07T13:06:04.243 回答