Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在字典的值中通过标记提取所有值?_Python_List_Dictionary - Fatal编程技术网

Python 如何在字典的值中通过标记提取所有值?

Python 如何在字典的值中通过标记提取所有值?,python,list,dictionary,Python,List,Dictionary,我有一本字典,里面有500000个条目,如下所示: result = '182720808': {'transaction_id': '182720808', 'product_amount': '2.4', 'user_invoice_date': '2018-10-25', 'tracking_code': '30643198', 'from_country': 'FR', 'to_country': 'FR', 'package_type_id': '10', 'shipping_la

我有一本字典,里面有500000个条目,如下所示:

result = 

'182720808': {'transaction_id': '182720808', 'product_amount': '2.4', 'user_invoice_date': '2018-10-25', 'tracking_code': '30643198', 'from_country': 'FR', 'to_country': 'FR', 'package_type_id': '10', 'shipping_label_created': '2018-10-13 21', '14': '35', 'amount': '3.23'},
'280284691': {'transaction_id': '280284691', 'product_amount': '2.4', 'user_invoice_date': '2019-03-16', 'tracking_code': '42891295', 'from_country': 'FR', 'to_country': 'FR', 'package_type_id': '10', 'shipping_label_created': '2019-03-08 09', '04': '53', 'amount': '2.9'}
我想获得所有产品金额、所有用户发票数据等的列表。基本上只是在字典的值中为每个标记创建一个列表

我试过以下方法

all_product_amounts = []
for item in results:
   all_product_amounts.append(result[result.keys())
但这不起作用。我是python新手,希望能够更好地使用字典

预期输出将为值内的每个标记提供一个列表:

all_product_amounts = [2.4, 2.4]
all_package_type_id = [10, 10]
...

这看起来像你想要的

all_product_amounts = [result[key]['product_amount'] for key in result]
all_user_invoice_dates = [result[key]['user_invoice_date'] for key in result]

这里有一个解决方案。结果将是一个带有键的字典,如
product\u amount
transaction\u id
。。。和值是包含适当键的所有数据的列表

mydict = {
  '182720808': {
    'transaction_id': '182720808',
    'product_amount': '2.4',
    'user_invoice_date': '2018-10-25',
    'tracking_code': '30643198',
    'from_country': 'FR',
    'to_country': 'FR',
    'package_type_id': '10',
    'shipping_label_created': '2018-10-13 21',
    '14': '35',
    'amount': '3.23'
  },
  '280284691': {
    'transaction_id': '280284691',
    'product_amount': '2.4',
    'user_invoice_date': '2019-03-16',
    'tracking_code': '42891295',
    'from_country': 'FR',
    'to_country': 'FR',
    'package_type_id': '10',
    'shipping_label_created': '2019-03-08 09',
    '04': '53',
    'amount': '2.9'
  }
}

result = {}
for entry in mydict.values():
    for key, value in entry.items():
        if key not in result.keys():
            result[key] = [value]
        else:
            result[key].append(value)

print(result)
结果:

{
  'transaction_id': ['182720808', '280284691'],
  'product_amount': ['2.4', '2.4'],
  'user_invoice_date': ['2018-10-25', '2019-03-16'],
  'tracking_code': ['30643198', '42891295'],
  'from_country': ['FR', 'FR'],
  'to_country': ['FR', 'FR'],
  'package_type_id': ['10', '10'],
  'shipping_label_created': ['2018-10-13 21', '2019-03-08 09'],
  '14': ['35'],
  'amount': ['3.23', '2.9'],
  '04': ['53']
}

有了它,您可以使用
result['product\u amount']
(或任何其他有效键)来获取所需的列表。

当然是一个更好的工具,但基于dict的方法比已经提出的更灵活,它提取所有匹配的信息:

def to_dict_of_lists(x):
    return {
        k: [d[k] for d in x.values()]
        for k in x[next(iter(x.keys()))].keys()
        if all(k in x[y] for y in x)}


x = {1: {'a': 1, 'b': 2}, 2: {'a': 3, 'b': 4}}
print(to_dict_of_lists(x))
# {'a': [1, 3], 'b': [2, 4]}


result = {
'182720808': {'transaction_id': '182720808', 'product_amount': '2.4', 'user_invoice_date': '2018-10-25', 'tracking_code': '30643198', 'from_country': 'FR', 'to_country': 'FR', 'package_type_id': '10', 'shipping_label_created': '2018-10-13 21', '14': '35', 'amount': '3.23'},
'280284691': {'transaction_id': '280284691', 'product_amount': '2.4', 'user_invoice_date': '2019-03-16', 'tracking_code': '42891295', 'from_country': 'FR', 'to_country': 'FR', 'package_type_id': '10', 'shipping_label_created': '2019-03-08 09', '04': '53', 'amount': '2.9'}
}
y = to_dict_of_lists(result)
print(y)
# {'transaction_id': ['182720808', '280284691'], 'product_amount': ['2.4', '2.4'], 'user_invoice_date': ['2018-10-25', '2019-03-16'], 'tracking_code': ['30643198', '42891295'], 'from_country': ['FR', 'FR'], 'to_country': ['FR', 'FR'], 'package_type_id': ['10', '10'], 'shipping_label_created': ['2018-10-13 21', '2019-03-08 09'], 'amount': ['3.23', '2.9']}
print(y['product_amount'])
# ['2.4', '2.4']
另一种方法是根据需要提取给定列表:

def extract_by_key(x, key):
    return [d[key] for d in x.values() if key in d]


print(extract_by_key(result, 'product_amount'))
# ['2.4', '2.4']

all\u product\u amounts.append(result[result.keys())
是一个语法错误,输入也有语法错误我认为
pandas
DataFrame
对于这种类型的数据可能非常方便谢谢。对于列表理解,是否有类似的方法在列表中包含多个值,例如
date\u和\u id=[['user\u invoice\u date',product\u amount]]
?如果我想在一个列表中有两个值,我会做result=[result[key]['product\u amount],result[key]['user\u invoice\u date]?所有的数据=[[result[key]['user\u invoice\u date'],result[key]['product\u amount']]对于key-in-result],会给你这样的东西:[[datedata1,amountdata1],[datedata2,amountdata2]]