вероятно, излишество, я часто использую этот UDF:
CREATE FUNCTION [dbo].[f_pad_before](@string VARCHAR(255), @desired_length INTEGER, @pad_character CHAR(1))
RETURNS VARCHAR(255) AS
BEGIN
-- Prefix the required number of spaces to bulk up the string and then replace the spaces with the desired character
RETURN ltrim(rtrim(
CASE
WHEN LEN(@string) < @desired_length
THEN REPLACE(SPACE(@desired_length - LEN(@string)), ' ', @pad_character) + @string
ELSE @string
END
))
END
Так, чтобы можно было сделать вещи как:
select dbo.f_pad_before('aaa', 10, '_')
Вы можете рассмотреть тип collections. namedtuple
для создания объектов, подобных кортежу, у которых есть поля, доступные с помощью поиска по атрибуту.
collections. namedtuple (typename, field_names [, verbose])
Возвращает новый подкласс кортежа с именем typename. Новый подкласс используется для создания объектов, похожих на кортежи, у которых есть поля, доступные при поиске атрибутов, а также индексируемые и повторяемые. Экземпляры подкласса также имеют полезную строку документации (с typename и field_names) и полезный метод
__ repr __ ()
, который перечисляет содержимое кортежа в формате name = value.
>>> import collections
>>> mytup = collections.namedtuple('mytup', ['tag','name', 'values'])
>>> e1 = mytup('tag1','great',[1,'two',3])
>>> e1
mytup(tag='tag1', name='great', values=[1, 'two', 3])
>>> e1.values
[1, 'two', 3]
>>>
Основываясь на других ответах, пример фильтрации списка объектов mytup
: объекты
>>> tlist = [mytup("foo", "dog", [1,2,3,4]),
mytup("bar","cat", [4,5,6,7,8,9]), mytup("moo","cow", [4,5,7,8,9,1,3,4,65])]
>>> tlist
[mytup(tag='foo', name='dog', values=[1, 2, 3, 4]),
mytup(tag='bar', name='cat', values=[4, 5, 6, 7, 8, 9]),
mytup(tag='moo', name='cow', values=[4, 5, 7, 8, 9, 1, 3, 4, 65])]
>>> [t for t in tlist if t.tag == 'bar']
[mytup(tag='bar', name='cat', values=[4, 5, 6, 7, 8, 9])]
>>>
Namedtuple
, конечно, могут использоваться в других структурах (например, dict
), как упоминалось в других ответах.
Вот комментарий к @ ответ gimel :
>>> import collections
>>> T = collections.namedtuple("T", 'tag name values')
>>> from itertools import starmap
>>> list(starmap(T, [("a", "b", [1,2]), ("c", "d",[3,4])]))
[T(tag='a', name='b', values=[1, 2]), T(tag='c', name='d', values=[3, 4])]
Учебник Python по структурам данных см. Раздел 5.3 «Кортежи и последовательности»
однако, если вы хотите использовать «имя» для индексации данных, вы, вероятно, захотите использовать словарь, в котором в качестве ключа указано имя строки, а значениями являются кортеж из (tag, [list, of, values]), например
d =
{ "foo" : ("dog", [1,2,3,4]),
"bar" : ("cat", [4,5,6,7,8,9]),
"moo" : ("cow", [4,5,7,8,9,1,3,4,65])
}
for name,(tag,values) in d.items():
do_something()
, так же d ["foo"]
будет работать, как и для любого другого словаря.
почему бы просто не использовать список кортежей (да, это тип данных в python, например списки, но неизменяемый):
mylistoftuples = [(1, 2, 3), (2, "three", 4), (3, 4, [1, 2, 3, 4, 5])]
for k, v, x in mylistoftuples:
print k, v, x
Вы можете иметь массив кортежей из трех элементов.
arr = [ (1,2,3), (4,5,6), (7,8,9)]
for (k, v, x) in arr:
# do stuff