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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.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 获取排序列表中特定键的前n个字典_Python_List_Dictionary - Fatal编程技术网

Python 获取排序列表中特定键的前n个字典

Python 获取排序列表中特定键的前n个字典,python,list,dictionary,Python,List,Dictionary,我正在编写一个脚本,计算订单发货地址与特定连锁店的每个门店位置之间的距离(以英里为单位)。到目前为止,我已经创建了一个按顺序和距离排序的字典列表。看起来是这样的: [ { "order_id": 1, "distance": 10, "storeID": 1112 }, { "order_id": 1, "distance":

我正在编写一个脚本,计算订单发货地址与特定连锁店的每个门店位置之间的距离(以英里为单位)。到目前为止,我已经创建了一个按顺序和距离排序的字典列表。看起来是这样的:

   [
       {
            "order_id": 1,
            "distance": 10,
            "storeID": 1112
        },
        {
            "order_id": 1,
            "distance": 20,
            "storeID": 1116
        },
        {
            "order_id": 1,
            "distance": 30,
            "storeID": 1134
        },
        {
            "order_id": 1,
            "distance": 40,
            "storeID": 1133
        },
        {
            "order_id": 2,
            "distance": 6,
            "storeID": 1112
        },
        {
            "order_id": 2,
            "distance": 12,
            "storeID": 1116
        },
        {
            "order_id": 2,
            "distance": 18,
            "storeID": 1134
        },
        {
            "order_id": 2,
            "distance": 24,
            "storeID": 1133
        }
    ]
   [
       {
            "order_id": 1,
            "closet_store_distance": 10,
            "closest_store_id": 1112,
            "second_closet_store_distance": 20,
            "second_closest_store_id": 1116
       },
       {
            "order_id": 2,
            "closet_store_distance": 6,
            "closest_store_id": 1112,
            "second_closet_store_distance": 12,
            "second_closest_store_id": 1116
      }
]
从这里,我想找到每个订单id的两个最近的商店,以及它们之间的距离

我最终想要的是一个如下列表:

   [
       {
            "order_id": 1,
            "distance": 10,
            "storeID": 1112
        },
        {
            "order_id": 1,
            "distance": 20,
            "storeID": 1116
        },
        {
            "order_id": 1,
            "distance": 30,
            "storeID": 1134
        },
        {
            "order_id": 1,
            "distance": 40,
            "storeID": 1133
        },
        {
            "order_id": 2,
            "distance": 6,
            "storeID": 1112
        },
        {
            "order_id": 2,
            "distance": 12,
            "storeID": 1116
        },
        {
            "order_id": 2,
            "distance": 18,
            "storeID": 1134
        },
        {
            "order_id": 2,
            "distance": 24,
            "storeID": 1133
        }
    ]
   [
       {
            "order_id": 1,
            "closet_store_distance": 10,
            "closest_store_id": 1112,
            "second_closet_store_distance": 20,
            "second_closest_store_id": 1116
       },
       {
            "order_id": 2,
            "closet_store_distance": 6,
            "closest_store_id": 1112,
            "second_closet_store_distance": 12,
            "second_closest_store_id": 1116
      }
]

我不确定如何循环浏览此列表中的每个订单id并选择两个最近的门店。非常感谢您的帮助。

尝试类似的方法,我假设初始数据位于名为sample.txt的文件中

生成的文件如下所示:

[
   {
      "second_closest_store_id": 1116,
      "closet_store_distance": 10,
      "closest_store_id": 1112,
      "order_id": 1,
      "second_closet_store_distance": 20
   },
   {
      "second_closest_store_id": 1116,
      "closet_store_distance": 6,
      "closest_store_id": 1112,
      "order_id": 2,
      "second_closet_store_distance": 12
   }
]

尝试类似的方法,我假设初始数据位于一个名为sample.txt的文件中

生成的文件如下所示:

[
   {
      "second_closest_store_id": 1116,
      "closet_store_distance": 10,
      "closest_store_id": 1112,
      "order_id": 1,
      "second_closet_store_distance": 20
   },
   {
      "second_closest_store_id": 1116,
      "closet_store_distance": 6,
      "closest_store_id": 1112,
      "order_id": 2,
      "second_closet_store_distance": 12
   }
]

一个很好的可读性答案,但是使用了我的一个免费库:

from PLOD import PLOD

order_store_list = [
       {
            "order_id": 1,
            "distance": 10,
            "storeID": 1112
        },
        {
            "order_id": 1,
            "distance": 20,
            "storeID": 1116
        },
        {
            "order_id": 1,
            "distance": 30,
            "storeID": 1134
        },
        {
            "order_id": 1,
            "distance": 40,
            "storeID": 1133
        },
        {
            "order_id": 2,
            "distance": 6,
            "storeID": 1112
        },
        {
            "order_id": 2,
            "distance": 12,
            "storeID": 1116
        },
        {
            "order_id": 2,
            "distance": 18,
            "storeID": 1134
        },
        {
            "order_id": 2,
            "distance": 24,
            "storeID": 1133
        }
]

#
# first, get the order_ids (place in a dictionary to ensure uniqueness)
#
order_id_keys = {}
for entry in order_store_list:
    order_id_keys[entry["order_id"]] = True
#
# next, get the two closest stores per order_id
#
closest_stores = []
for order_id in order_id_keys:
    top_two = PLOD(order_store_list).eq("order_id", order_id).sort("distance").returnList(limit=2)
    closest_stores.append({
        "order_id": order_id,
        "closet_store_distance": top_two[0]["distance"],
        "closest_store_id": top_two[0]["storeID"],
        "second_closet_store_distance": top_two[1]["distance"],
        "second_closest_store_id": top_two[1]["storeID"]
    })
#
# sort by order_id again (if that is important)
#
closest_stores = PLOD(closest_stores).sort("order_id").returnList()
本例假设生产订单存储列表适合内存。如果您使用的是较大的数据集,我强烈建议您为该数据库使用数据库和python库


我的PLOD库是免费的开源MIT,但需要Python 2.7。我离发布Python 3.5还有两周的时间。请参阅

一个可读性很好的答案,但使用的是我的一个免费库:

from PLOD import PLOD

order_store_list = [
       {
            "order_id": 1,
            "distance": 10,
            "storeID": 1112
        },
        {
            "order_id": 1,
            "distance": 20,
            "storeID": 1116
        },
        {
            "order_id": 1,
            "distance": 30,
            "storeID": 1134
        },
        {
            "order_id": 1,
            "distance": 40,
            "storeID": 1133
        },
        {
            "order_id": 2,
            "distance": 6,
            "storeID": 1112
        },
        {
            "order_id": 2,
            "distance": 12,
            "storeID": 1116
        },
        {
            "order_id": 2,
            "distance": 18,
            "storeID": 1134
        },
        {
            "order_id": 2,
            "distance": 24,
            "storeID": 1133
        }
]

#
# first, get the order_ids (place in a dictionary to ensure uniqueness)
#
order_id_keys = {}
for entry in order_store_list:
    order_id_keys[entry["order_id"]] = True
#
# next, get the two closest stores per order_id
#
closest_stores = []
for order_id in order_id_keys:
    top_two = PLOD(order_store_list).eq("order_id", order_id).sort("distance").returnList(limit=2)
    closest_stores.append({
        "order_id": order_id,
        "closet_store_distance": top_two[0]["distance"],
        "closest_store_id": top_two[0]["storeID"],
        "second_closet_store_distance": top_two[1]["distance"],
        "second_closest_store_id": top_two[1]["storeID"]
    })
#
# sort by order_id again (if that is important)
#
closest_stores = PLOD(closest_stores).sort("order_id").returnList()
本例假设生产订单存储列表适合内存。如果您使用的是较大的数据集,我强烈建议您为该数据库使用数据库和python库


我的PLOD库是免费的开源MIT,但需要Python 2.7。我离发布Python 3.5还有两周的时间。见

谢谢你@navidad。实际上,我有大约30000份订单需要循环处理。因此,这样做:order1=make_ordertop1,1 order2=make_ordertop2,2 json.dump[order1,order2],result_file,indent=3,separators=',',':'实际上是站不住脚的。我所遇到的困难是弄清楚如何循环每个订单。对不起,如果我之前不清楚的话。谢谢你的帮助。@sumojelly你知道了吗?谢谢你@navidad。实际上,我有大约30000份订单需要循环处理。因此,这样做:order1=make_ordertop1,1 order2=make_ordertop2,2 json.dump[order1,order2],result_file,indent=3,separators=',',':'实际上是站不住脚的。我所遇到的困难是弄清楚如何循环每个订单。对不起,如果我之前不清楚的话。谢谢你的帮助。@sumojelly你知道了吗?嘿@JohnAD-谢谢分享。这看起来像一个很酷的库——特别是对于像我这样习惯于以查询形式思考问题的人来说。我将安装PLOD,并让您知道它是如何运行的goesHey@JohnAD-谢谢分享。这看起来像一个很酷的库——特别是对于像我这样习惯于以查询形式思考问题的人来说。我将安装PLOD并让您知道它是如何运行的