1

辞書の私のリスト

[
   {'town':'A', 'x':12, 'y':13},
   {'town':'B', 'x':100, 'y':43},
   {'town':'C', 'x':19, 'y':5}
]

私の出発点は次のとおりです。

x = 2
Y =3

私の最大範囲:

mxr = 30

私の機能:

def calculateRange (x1, x2, y1, y2):
  squareNumber = math.sqrt(math.pow ((x1-x2),2) + math.pow((y1-y2),2))
  return round(squareNumber, 1)

calculateRange <= の結果が最大範囲の場合、リストを反復し、データと関数の結果を新しいリストにプッシュする方法

私は最終的にしたい:

[
    {'town':'A', 'x':12, 'y':13, 'r':someting },
    {'town':'C', 'x':19, 'y':5, 'r':someting}
]
4

3 に答える 3

1

ループを使用するだけです:

for entry in inputlist:
    entry['r'] = min(mxr, calculateRange(x, entry['x'], y, entry['y']))

ディクショナリは可変であり、キーの追加はディクショナリへのすべての参照に反映されます。

デモ:

>>> import math
>>> def calculateRange (x1, x2, y1, y2):
...   squareNumber = math.sqrt(math.pow ((x1-x2),2) + math.pow((y1-y2),2))
...   return round(squareNumber, 1)
...
>>> x = 2
>>> y = 3
>>> mxr = 30
>>> inputlist = [
...    {'town':'A', 'x':12, 'y':13},
...    {'town':'B', 'x':100, 'y':43},
...    {'town':'C', 'x':19, 'y':5}
... ]
>>> for entry in inputlist:
...     entry['r'] = min(mxr, calculateRange(x, entry['x'], y, entry['y']))
... 
>>> inputlist
[{'town': 'A', 'x': 12, 'r': 14.1, 'y': 13}, {'town': 'B', 'x': 100, 'r': 30, 'y': 43}, {'town': 'C', 'x': 19, 'r': 17.1, 'y': 5}]
于 2013-07-06T16:52:12.003 に答える
1

私はあなたがこのようなものを探していると思います:

>>> lis = [                           
   {'town':'A', 'x':12, 'y':13},
   {'town':'B', 'x':100, 'y':43},
   {'town':'C', 'x':19, 'y':5}
]
>>> x = 2
>>> y = 3
for dic in lis:
    r = calculate(x,y,dic['x'],dic['y'])
    dic['r'] = r
...     
>>> lis = [x for x in lis if x['r'] <= mxr]
>>> lis
[{'y': 13, 'x': 12, 'town': 'A', 'r': 14.142135623730951}, {'y': 5, 'x': 19, 'town': 'C', 'r': 17.11724276862369}]
于 2013-07-06T17:04:06.213 に答える
0

これは、あなたの望むことですか?

L = [{'town':'A', 'x':12, 'y':13},{'town':'B', 'x':100, 'y':43},{'town':'C', 'x':19, 'y':5}]
X, Y = 2, 3
mxr = 30

def calculateRange(x1, x2, y1, y2):
  return round( ((x1-x2)**2 + (y1-y2)**2)**.5, 1 )

R = []

for e in L:
  r = calculateRange(e['x'], X, e['y'], Y)
  if r <= mxr:
    e['r'] = r
    R.append(e)

print R
# [{'town': 'A', 'x': 12, 'r': 14.1, 'y': 13}, {'town': 'C', 'x': 19, 'r': 17.1, 'y': 5}]
于 2013-07-06T17:09:37.727 に答える