从字典中提取键到另一个Python字典

2024-05-06 10:50:44 浏览数 (2)

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()方法返回被提取的键的值。例如:

代码语言:javascript复制
 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键。

代码语言: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')

# 打印'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()方法来删除字典中的键,并返回被删除的键的值。例如:

代码语言:javascript复制
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来存储这些值。

0 人点赞