1、问题背景
有一个很大的Python字典,其中一个键的值是另一个字典。现在想创建一个新的字典,使用这些值,然后从原始字典中删除该键。但目前并不了解是否有函数可以将这些值导出到另一个字典中,仅知道可以使用.pop()
函数进行删除。
2、解决方案
代码语言:javascript复制def popAndMergeDicts(line):
tempDict = line['billing_address']
del line['billing_address']
for i in tempDict:
line[i] = tempDict[i]
print(line)
def process_file(filename):
lines = tuple(open(filename))
for line in lines[0:]:
popAndMergeDicts(line)
process_file('allOrdersData')
可以使用.pop()
方法来提取字典中的键并将其值导出到另一个字典中。pop()
方法返回被提取的键的值。例如:
big_dict = {
'name': 'John Doe',
'age': 30,
'city': 'New York'
}
# 提取'age'键并将其值导出到'age_dict'
age_dict = big_dict.pop('age')
# 打印'big_dict'
print(big_dict)
# {'name': 'John Doe', 'city': 'New York'}
# 打印'age_dict'
print(age_dict)
# 30
提取billing_address
键并将其值导出到另一个字典bill_dict
中,然后从原始字典中删除billing_address
键。
big_dict = {
'shipping_cost_tax': '0.0000',
'refunded_amount': '0.0000',
# etc
'billing_address': {
'state': '*******',
'street_1': '*************',
'street_2': '',
'country_iso2': 'AU',
# etc
},
'subtotal_tax': '0.0000'
}
bill_dict = big_dict.pop('billing_address')
# 打印'big_dict'
print(big_dict)
# {'shipping_cost_tax': '0.0000', 'refunded_amount': '0.0000', 'subtotal_tax': '0.0000'}
# 打印'bill_dict'
print(bill_dict)
# {'state': '*******', 'street_1': '*************', 'street_2': '', 'country_iso2': 'AU', 'zip': '************', 'last_name': '************', 'company': '***************', 'first_name': '*********', 'email': '***************', 'phone': '*************', 'city': '*************'}
也可以使用dict.pop()
方法来删除字典中的键,并返回被删除的键的值。例如:
big_dict = {
'name': 'John Doe',
'age': 30,
'city': 'New York'
}
# 删除'age'键并将其值导出到'age_dict'
age_dict = big_dict.pop('age')
# 打印'big_dict'
print(big_dict)
# {'name': 'John Doe', 'city': 'New York'}
# 打印'age_dict'
print(age_dict)
# 30
如果想保留原始字典中的键/值,而不是创建一个新的字典,可以使用以下方法:
代码语言:javascript复制big_dict = {
'shipping_cost_tax': '0.0000',
'refunded_amount': '0.0000',
# etc
'billing_address': {
'state': '*******',
'street_1': '*************',
'street_2': '',
'country_iso2': 'AU',
# etc
},
'subtotal_tax': '0.0000'
}
bill_dict = big_dict.pop('billing_address', {})
for k in bill_dict:
big_dict[k] = bill_dict[k]
# 打印'big_dict'
print(big_dict)
# {'shipping_cost_tax': '0.0000', 'refunded_amount': '0.0000', 'state': '*******', 'street_1': '*************', 'street_2': '', 'country_iso2': 'AU', 'subtotal_tax': '0.0000'}
这样就可以将billing_address
键的值保留在原始字典中,同时又可以创建一个新的字典bill_dict
来存储这些值。