将Python字典转换为List[complex]

2024-04-20 03:48:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python和这个论坛非常陌生:) 我一直在努力用字典,真的需要一些帮助。你知道吗

对于我的问题,输入是:

frontier = [
              { 'state': (2, 5, 4, 3, 0, 1), 'path': [ 'PULL' ] },
              { 'state': (2, 4, 5, 0, 3, 1), 'path': [ 'SWAP','PULL' ] },
              { 'state': (2, 5, 4, 0, 1, 3), 'path': [ 'SWAP' ] },
              { 'state': (2, 0, 5, 4, 3, 1), 'path': [ 'PUSH', 'PUSH' ] },

            ]

我们被告知每个动作的赋值:

  • 推送:5
  • 拉力:6
  • 交换:8
  • 翻转:2

    例如,如果[push,swap]=5+8

对于这个问题,每个状态都有一个我计算的赋值(启发式)。你知道吗

然而,计算行动的价值让我感到困惑。我尝试过通过拆分项['path']进行编码,但它创建的列表无法使用。我不知道该怎么做。

我想列一个行动的清单。对于上述问题,它将看起来:

[6, 14, 8, 10]

有人能告诉我如何通过对给定示例的解释和代码来实现它吗?你知道吗


Tags: path字典状态论坛pushpullstatefrontier
3条回答

试试这个:

result = []
for item in frontier:
    item_path_value = 0
    for action in item['path']:
        item_path_value += action.value
    result.append(item_path_value)

其中action.value应返回该特定操作的值

试试这个:

frontier = [
              { 'state': (2, 5, 4, 3, 0, 1), 'path': [ 'PULL' ] },
              { 'state': (2, 4, 5, 0, 3, 1), 'path': [ 'SWAP','PULL' ] },
              { 'state': (2, 5, 4, 0, 1, 3), 'path': [ 'SWAP' ] },
              { 'state': (2, 0, 5, 4, 3, 1), 'path': [ 'PUSH', 'PUSH' ] },

            ]

d = dict(PUSH=5, PULL=6, SWAP=8, FLIP=2)

out = [sum(d.get(i,0) for i in x['path']) for x in frontier]
print(out)

退货:

[6, 14, 8, 10]

.get(key, default)函数是您的朋友。它将从给定键的字典中获取一个值,如果找不到则返回默认值。我们对字典值path中的所有项求和。你知道吗

这是一种方法。你知道吗

frontier = [{ 'state': (2, 5, 4, 3, 0, 1), 'path': [ 'PULL' ] },
            { 'state': (2, 4, 5, 0, 3, 1), 'path': [ 'SWAP','PULL' ] },
            { 'state': (2, 5, 4, 0, 1, 3), 'path': [ 'SWAP' ] },
            { 'state': (2, 0, 5, 4, 3, 1), 'path': [ 'PUSH', 'PUSH' ] }]

d = {'PUSH': 5, 'PULL': 6, 'SWAP': 8, 'FLIP': 2}

res = [sum(map(d.get, item['path'])) for item in frontier]

print(res)

[6, 14, 8, 10]

解释

  • 创建将操作映射到值的字典。你知道吗
  • 使用summap延迟计算字典中所有操作的总和。你知道吗
  • 使用列表理解循环浏览列表中的每一本词典。你知道吗

相关问题 更多 >