如何使用正则表达式替换python字典中的字符串
目标 如何使用正则表达式替换python字典中的字符串 脚本如何使用正则表达式替换python字典中的字符串,python,regex,Python,Regex,目标 如何使用正则表达式替换python字典中的字符串 脚本 db_result = cursor.fetchall() # databse lds_data = {} # dictonary regex = re.compile(r'^([^: \\]+)') for lds_item in db_result: lds_data.update({re.findall(regex, lds_item[1]) : {'cust_code' : lds_item[0], 'osplat
db_result = cursor.fetchall() # databse
lds_data = {} # dictonary
regex = re.compile(r'^([^: \\]+)')
for lds_item in db_result:
lds_data.update({re.findall(regex, lds_item[1]) : {'cust_code' : lds_item[0], 'osplatofrm' : lds_item[2]]}})
TypeError: unhashable type: 'list'
CODE_CLIENT HOSTNAME OSPLATFORM
1 SRVDATA:23 WINSERVER
错误-输出
db_result = cursor.fetchall() # databse
lds_data = {} # dictonary
regex = re.compile(r'^([^: \\]+)')
for lds_item in db_result:
lds_data.update({re.findall(regex, lds_item[1]) : {'cust_code' : lds_item[0], 'osplatofrm' : lds_item[2]]}})
TypeError: unhashable type: 'list'
CODE_CLIENT HOSTNAME OSPLATFORM
1 SRVDATA:23 WINSERVER
DB\u结果
db_result = cursor.fetchall() # databse
lds_data = {} # dictonary
regex = re.compile(r'^([^: \\]+)')
for lds_item in db_result:
lds_data.update({re.findall(regex, lds_item[1]) : {'cust_code' : lds_item[0], 'osplatofrm' : lds_item[2]]}})
TypeError: unhashable type: 'list'
CODE_CLIENT HOSTNAME OSPLATFORM
1 SRVDATA:23 WINSERVER
预期最终结果
{SRVDATA : {'CUST_CODE': 1, 'OSPLATFORM': 'WINSERVER'}
简单方法:
# sample DB result (of one record)
db_result = [[1, 'SRVDATA:23', 'WINSERVER']]
lds_data = {}
for lds_item in db_result:
k = lds_item[1][:lds_item[1].rfind(':')] # extracting key
lds_data.update({k: {'cust_code': lds_item[0], 'osplatofrm': lds_item[2]}})
print(lds_data) # {'SRVDATA': {'cust_code': 1, 'osplatofrm': 'WINSERVER'}}
re.findall
返回一个不能用作dict键的列表re.findall(regex,lds_item[1])
返回一个列表,然后尝试将其设置为字典中的键。这失败了,因为dict键必须是不可变的对象(字符串、整数等)。如何修复@如何修复@Dan@LuisV.,发布数据库结果和最终预期结果。使用序列作为dict键的目标是什么?